From a21ed6649009bf71d128d354829f838a2be2ebcb Mon Sep 17 00:00:00 2001 From: Ramon Gutierrez Date: Wed, 26 Jun 2024 09:59:29 +0800 Subject: [PATCH] Move requested params to filters instead of hub selector #800 --- .../Filters/DateAndTimeHubFilter.php | 7 +++ .../HubFilter/Filters/InventoryHubFilter.php | 12 +++++ .../HubFilter/Filters/JoTypeHubFilter.php | 8 +++ .../HubFilter/Filters/MaxResultsHubFilter.php | 7 +++ .../Filters/PaymentMethodHubFilter.php | 8 +++ .../Filters/RiderAvailabilityHubFilter.php | 10 ++++ .../HubFilter/Filters/RoundRobinHubFilter.php | 7 +++ src/Service/HubFilter/HubFilterInterface.php | 6 ++- src/Service/HubSelector.php | 52 +++++++------------ 9 files changed, 81 insertions(+), 36 deletions(-) diff --git a/src/Service/HubFilter/Filters/DateAndTimeHubFilter.php b/src/Service/HubFilter/Filters/DateAndTimeHubFilter.php index 0b25096a..67097320 100644 --- a/src/Service/HubFilter/Filters/DateAndTimeHubFilter.php +++ b/src/Service/HubFilter/Filters/DateAndTimeHubFilter.php @@ -9,6 +9,13 @@ class DateAndTimeHubFilter extends BaseHubFilter implements HubFilterInterface { protected $id = 'date_and_time'; + public function getRequestedParams() : array + { + return [ + 'date_time', + ]; + } + public function filter(array $hubs, array $params = []) : array { if ($params['date_time'] == null) diff --git a/src/Service/HubFilter/Filters/InventoryHubFilter.php b/src/Service/HubFilter/Filters/InventoryHubFilter.php index 82be87c5..9bcc883c 100644 --- a/src/Service/HubFilter/Filters/InventoryHubFilter.php +++ b/src/Service/HubFilter/Filters/InventoryHubFilter.php @@ -27,6 +27,18 @@ class InventoryHubFilter extends BaseHubFilter implements HubFilterInterface $this->im = $im; } + public function getRequestedParams() : array + { + return [ + 'flag_inventory_check', + 'customer_class', + 'jo_type', + 'order_date', + 'service_type', + 'items', + ]; + } + public function filter(array $hubs, array $params = []) : array { // check if this is enabled diff --git a/src/Service/HubFilter/Filters/JoTypeHubFilter.php b/src/Service/HubFilter/Filters/JoTypeHubFilter.php index 15ba2952..01ed733f 100644 --- a/src/Service/HubFilter/Filters/JoTypeHubFilter.php +++ b/src/Service/HubFilter/Filters/JoTypeHubFilter.php @@ -9,6 +9,14 @@ class JoTypeHubFilter extends BaseHubFilter implements HubFilterInterface { protected $id = 'job_order_type'; + public function getRequestedParams() : array + { + return [ + 'flag_emergency', + 'jo_type', + ]; + } + public function filter(array $hubs, array $params = []) : array { if ($params['flag_emergency']) diff --git a/src/Service/HubFilter/Filters/MaxResultsHubFilter.php b/src/Service/HubFilter/Filters/MaxResultsHubFilter.php index 027ab2cd..16c1b514 100644 --- a/src/Service/HubFilter/Filters/MaxResultsHubFilter.php +++ b/src/Service/HubFilter/Filters/MaxResultsHubFilter.php @@ -9,6 +9,13 @@ class MaxResultsHubFilter extends BaseHubFilter implements HubFilterInterface { protected $id = 'max_results'; + public function getRequestedParams() : array + { + return [ + 'limit_results', + ]; + } + public function filter(array $hubs, array $params = []) : array { if (empty($params['limit_results'])) diff --git a/src/Service/HubFilter/Filters/PaymentMethodHubFilter.php b/src/Service/HubFilter/Filters/PaymentMethodHubFilter.php index bade7e65..8af6705b 100644 --- a/src/Service/HubFilter/Filters/PaymentMethodHubFilter.php +++ b/src/Service/HubFilter/Filters/PaymentMethodHubFilter.php @@ -9,6 +9,14 @@ class PaymentMethodHubFilter extends BaseHubFilter implements HubFilterInterface { protected $id = 'no_payment_method'; + public function getRequestedParams() : array + { + return [ + 'flag_emergency', + 'payment_method', + ]; + } + public function filter(array $hubs, array $params = []) : array { if ($params['flag_emergency']) diff --git a/src/Service/HubFilter/Filters/RiderAvailabilityHubFilter.php b/src/Service/HubFilter/Filters/RiderAvailabilityHubFilter.php index 8166a226..0e46e50b 100644 --- a/src/Service/HubFilter/Filters/RiderAvailabilityHubFilter.php +++ b/src/Service/HubFilter/Filters/RiderAvailabilityHubFilter.php @@ -12,6 +12,16 @@ class RiderAvailabilityHubFilter extends BaseHubFilter implements HubFilterInter { protected $id = 'no_available_rider'; + public function getRequestedParams() : array + { + return [ + 'flag_riders_check', + 'customer_class', + 'order_date', + 'service_type', + ]; + } + public function filter(array $hubs, array $params = []) : array { // check if this is enabled diff --git a/src/Service/HubFilter/Filters/RoundRobinHubFilter.php b/src/Service/HubFilter/Filters/RoundRobinHubFilter.php index ae0012f4..235293a9 100644 --- a/src/Service/HubFilter/Filters/RoundRobinHubFilter.php +++ b/src/Service/HubFilter/Filters/RoundRobinHubFilter.php @@ -23,6 +23,13 @@ class RoundRobinHubFilter extends BaseHubFilter implements HubFilterInterface $this->hub_distributor = $hub_distributor; } + public function getRequestedParams() : array + { + return [ + 'flag_round_robin', + ]; + } + public function filter(array $hubs, array $params = []) : array { if (!$params['flag_round_robin']) diff --git a/src/Service/HubFilter/HubFilterInterface.php b/src/Service/HubFilter/HubFilterInterface.php index fb9dea51..f3b9d2ab 100644 --- a/src/Service/HubFilter/HubFilterInterface.php +++ b/src/Service/HubFilter/HubFilterInterface.php @@ -10,9 +10,11 @@ interface HubFilterInterface public function setJOID(int $jo_id); - public function getJOID(): int; + public function getJOID() : int; public function setCustomerID(int $customer_id); - public function getCustomerID(): int; + public function getCustomerID() : int; + + public function getRequestedParams() : array; } \ No newline at end of file diff --git a/src/Service/HubSelector.php b/src/Service/HubSelector.php index 929d7bf5..fa1fb0b6 100644 --- a/src/Service/HubSelector.php +++ b/src/Service/HubSelector.php @@ -81,40 +81,20 @@ class HubSelector // get all the hubs within distance $filtered_hubs = $this->getClosestHubs($point, $limit_distance, $jo_id, $customer_id); - // gather all params in one array - // TODO: figure out a better way to do this where we don't have to specify the filter names here + // build param list $params = [ - 'date_and_time' => [ - 'date_time' => $date_time, - ], - 'no_inventory' => [ - 'flag_inventory_check' => $flag_inventory_check, - 'customer_class' => $customer_class, - 'jo_type' => $jo_type, - 'order_date' => $order_date, - 'service_type' => $service_type, - 'items' => $items, - ], - 'job_order_type' => [ - 'flag_emergency' => $flag_emergency, - 'jo_type' => $jo_type, - ], - 'max_results' => [ - 'limit_results' => $limit_results, - ], - 'no_payment_method' => [ - 'flag_emergency' => $flag_emergency, - 'payment_method' => $payment_method, - ], - 'no_available_rider' => [ - 'flag_riders_check' => $flag_riders_check, - 'customer_class' => $customer_class, - 'order_date' => $order_date, - 'service_type' => $service_type, - ], - 'round_robin' => [ - 'flag_round_robin' => $flag_round_robin, - ], + 'date_time' => $date_time, + 'flag_inventory_check' => $flag_inventory_check, + 'customer_class' => $customer_class, + 'jo_type' => $jo_type, + 'order_date' => $order_date, + 'service_type' => $service_type, + 'items' => $items, + 'flag_emergency' => $flag_emergency, + 'limit_results' => $limit_results, + 'payment_method' => $payment_method, + 'flag_riders_check' => $flag_riders_check, + 'flag_round_robin' => $flag_round_robin, ]; // loop through all enabled filters @@ -129,7 +109,11 @@ class HubSelector $f->setJOID($jo_id); $f->setCustomerID($customer_id); - $filtered_hubs = $f->filter($filtered_hubs, $params[$f->getID()]); + // get requested params only + $req_params = array_intersect_key($params, array_flip($f->getRequestedParams())); + + // filter hub list + $filtered_hubs = $f->filter($filtered_hubs, $req_params); // error_log($f->getID() . ' hubs ' . json_encode($filtered_hubs)); }