From fb63fd80aceb2fc8a8b0294bb8711b109c39903f Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Fri, 9 Jul 2021 07:33:23 +0000 Subject: [PATCH] Modify RiderController. Fix calls to MobileAPIHandler. #591 --- config/api_acl.yaml | 7 + src/Controller/ResqAPI/BatteryController.php | 2 +- src/Controller/ResqAPI/CustomerController.php | 21 +- .../ResqAPI/CustomerVehicleController.php | 8 +- src/Controller/ResqAPI/PartnerController.php | 6 +- src/Controller/ResqAPI/RiderController.php | 221 +++++------------- src/Controller/ResqAPI/ServiceController.php | 2 +- src/Controller/ResqAPI/VehicleController.php | 4 +- src/Service/MobileAPIHandler.php | 19 +- 9 files changed, 107 insertions(+), 183 deletions(-) diff --git a/config/api_acl.yaml b/config/api_acl.yaml index c9cc42bf..2499e003 100644 --- a/config/api_acl.yaml +++ b/config/api_acl.yaml @@ -134,3 +134,10 @@ access_keys: label: Get Partner Info - id: mobile_partner.review label: Add Partner Review + - id: mobile_rider + label: Mobile Rider Access + acls: + - id: mobile_rider.status.get + label: Get Rider Status + - id: mobile_rider.rating.add + label: Add Rider Rating diff --git a/src/Controller/ResqAPI/BatteryController.php b/src/Controller/ResqAPI/BatteryController.php index 8f2e2ba6..d1517838 100644 --- a/src/Controller/ResqAPI/BatteryController.php +++ b/src/Controller/ResqAPI/BatteryController.php @@ -42,7 +42,7 @@ class BatteryController extends APIController $user_id = $this->getUser()->getID(); // get mobile user - $mobile_user = $mah->findMobileUser($em, $user_id); + $mobile_user = $mah->findMobileUser($user_id); if ($mobile_user == null) return new APIResponse(false, 'No mobile user found.'); diff --git a/src/Controller/ResqAPI/CustomerController.php b/src/Controller/ResqAPI/CustomerController.php index c47daf55..287fd082 100644 --- a/src/Controller/ResqAPI/CustomerController.php +++ b/src/Controller/ResqAPI/CustomerController.php @@ -55,7 +55,7 @@ class CustomerController extends APIController $user_id = $this->getUser()->getID(); // check if capi user already has a mobile user - $mobile_user = $mah->findMobileUser($em,$user_id); + $mobile_user = $mah->findMobileUser($user_id); if ($mobile_user != null) return new APIResponse(false, 'User already registered'); @@ -126,7 +126,7 @@ class CustomerController extends APIController $user_id = $this->getUser()->getID(); // get mobile user - $mobile_user = $mah->findMobileUser($em, $user_id); + $mobile_user = $mah->findMobileUser($user_id); if ($mobile_user == null) return new APIResponse(false, 'No mobile user found.'); @@ -140,6 +140,7 @@ class CustomerController extends APIController $otp_mode = $_ENV['OTP_MODE']; + $data = []; // check for hardcoded phone number for app store testing if ($phone_number == '639221111111') { @@ -200,7 +201,7 @@ class CustomerController extends APIController $user_id = $this->getUser()->getID(); // get mobile user - $mobile_user = $mah->findMobileUser($em, $user_id); + $mobile_user = $mah->findMobileUser($user_id); if ($mobile_user == null) return new APIResponse(false, 'No mobile user found.'); @@ -246,7 +247,7 @@ class CustomerController extends APIController $user_id = $this->getUser()->getID(); // get mobile user - $mobile_user = $mah->findMobileUser($em, $user_id); + $mobile_user = $mah->findMobileUser($user_id); if ($mobile_user == null) return new APIResponse(false, 'No mobile user found.'); @@ -295,7 +296,7 @@ class CustomerController extends APIController $user_id = $this->getUser()->getID(); // get mobile user - $mobile_user = $mah->findMobileUser($em, $user_id); + $mobile_user = $mah->findMobileUser($user_id); if ($mobile_user == null) return new APIResponse(false, 'No mobile user found.'); @@ -329,7 +330,7 @@ class CustomerController extends APIController $user_id = $this->getUser()->getID(); // get mobile user - $mobile_user = $mah->findMobileUser($em, $user_id); + $mobile_user = $mah->findMobileUser($user_id); if ($mobile_user == null) return new APIResponse(false, 'No mobile user found.'); @@ -353,7 +354,7 @@ class CustomerController extends APIController $user_id = $this->getUser()->getID(); // get mobile user - $mobile_user = $mah->findMobileUser($em, $user_id); + $mobile_user = $mah->findMobileUser($user_id); if ($mobile_user == null) return new APIResponse(false, 'No mobile user found.'); @@ -391,7 +392,7 @@ class CustomerController extends APIController $user_id = $this->getUser()->getID(); // get mobile user - $mobile_user = $mah->findMobileUser($em, $user_id); + $mobile_user = $mah->findMobileUser($user_id); if ($mobile_user == null) return new APIResponse(false, 'No mobile user found.'); @@ -441,7 +442,7 @@ class CustomerController extends APIController $user_id = $this->getUser()->getID(); // get mobile user - $mobile_user = $mah->findMobileUser($em, $user_id); + $mobile_user = $mah->findMobileUser($user_id); if ($mobile_user == null) return new APIResponse(false, 'No mobile user found.'); @@ -473,7 +474,7 @@ class CustomerController extends APIController $user_id = $this->getUser()->getID(); // get mobile user - $mobile_user = $mah->findMobileUser($em, $user_id); + $mobile_user = $mah->findMobileUser($user_id); if ($mobile_user == null) return new APIResponse(false, 'No mobile user found.'); diff --git a/src/Controller/ResqAPI/CustomerVehicleController.php b/src/Controller/ResqAPI/CustomerVehicleController.php index 884b5142..fdbba8e0 100644 --- a/src/Controller/ResqAPI/CustomerVehicleController.php +++ b/src/Controller/ResqAPI/CustomerVehicleController.php @@ -43,7 +43,7 @@ class CustomerVehicleController extends APIController $user_id = $this->getUser()->getID(); // get mobile user - $mobile_user = $mah->findMobileUser($em, $user_id); + $mobile_user = $mah->findMobileUser($user_id); if ($mobile_user == null) return new APIResponse(false, 'No mobile user found.'); @@ -72,7 +72,7 @@ class CustomerVehicleController extends APIController $user_id = $this->getUser()->getID(); // get mobile user - $mobile_user = $mah->findMobileUser($em, $user_id); + $mobile_user = $mah->findMobileUser($user_id); // get customer vehicle $cv = $em->getRepository(CustomerVehicle::class)->find($id); @@ -107,7 +107,7 @@ class CustomerVehicleController extends APIController $user_id = $this->getUser()->getID(); // get mobile user - $mobile_user = $mah->findMobileUser($em, $user_id); + $mobile_user = $mah->findMobileUser($user_id); if ($mobile_user == null) return new APIResponse(false, 'No mobile user found.'); @@ -129,7 +129,7 @@ class CustomerVehicleController extends APIController if ($cv->getWarrantyExpiration() != null) $wty_ex = $cv->getWarrantyExpiration()->format('Y-m-d'); - $warranty = $mah->findWarranty($cv->getPlateNumber(), $em); + $warranty = $mah->findWarranty($cv->getPlateNumber()); $cv_name = ''; if ($cv->getName() != null) diff --git a/src/Controller/ResqAPI/PartnerController.php b/src/Controller/ResqAPI/PartnerController.php index ab9faa13..ff3c76eb 100644 --- a/src/Controller/ResqAPI/PartnerController.php +++ b/src/Controller/ResqAPI/PartnerController.php @@ -47,7 +47,7 @@ class PartnerController extends APIController $user_id = $this->getUser()->getID(); // get mobile user - $mobile_user = $mah->findMobileUser($em, $user_id); + $mobile_user = $mah->findMobileUser($user_id); if ($mobile_user == null) return new APIResponse(false, 'No mobile user found.'); @@ -105,7 +105,7 @@ class PartnerController extends APIController $user_id = $this->getUser()->getID(); // get mobile user - $mobile_user = $mah->findMobileUser($em, $user_id); + $mobile_user = $mah->findMobileUser($user_id); if ($mobile_user == null) return new APIResponse(false, 'No mobile user found.'); @@ -165,7 +165,7 @@ class PartnerController extends APIController $user_id = $this->getUser()->getID(); // get mobile user - $mobile_user = $mah->findMobileUser($em, $user_id); + $mobile_user = $mah->findMobileUser($user_id); if ($mobile_user == null) return new APIResponse(false, 'No mobile user found.'); diff --git a/src/Controller/ResqAPI/RiderController.php b/src/Controller/ResqAPI/RiderController.php index b7f97783..875ec545 100644 --- a/src/Controller/ResqAPI/RiderController.php +++ b/src/Controller/ResqAPI/RiderController.php @@ -9,15 +9,14 @@ use Doctrine\ORM\Query; use Doctrine\ORM\EntityManagerInterface; use Catalyst\APIBundle\Controller\APIController; -// TODO: what do we use for response? APIResponse or APIResult? -// APIResult is what is used by APIController. APIResponse is what is used by CAPI use Catalyst\APIBundle\Response\APIResponse; -use App\Ramcar\APIResult; use App\Entity\Rider; use App\Entity\JobOrder; +use App\Entity\RiderRating; use App\Service\RiderTracker; +use App\Service\MobileAPIHandler; use App\Ramcar\JOStatus; use App\Ramcar\APIRiderStatus; @@ -33,25 +32,33 @@ class RiderController extends APIController $this->acl_gen = $acl_gen; } - // TODO: needs to be modified for mobile user - public function getRiderStatus(Request $req, RiderTracker $rt, EntityManagerInterface $em) + public function getRiderStatus(Request $req, RiderTracker $rt, EntityManagerInterface $em, + MobileAPIHandler $mah) { + $this->denyAccessUnlessGranted('mobile_rider.status.get', null, 'No access.'); + $required_params = []; - $res = $this->checkParamsAndKey($req, $em, $required_params); - if ($res->isError()) - return $res->getReturnResponse(); + $msg = $this->checkRequiredParameters($req, $required_params); + if ($msg) + return new APIResponse(false, $msg); + + // get capi user to link to mobile user + $user_id = $this->getUser()->getID(); + + // get mobile user + $mobile_user = $mah->findMobileUser($user_id); + + if ($mobile_user == null) + return new APIResponse(false, 'No mobile user found.'); // get customer - $cust = $this->session->getCustomer(); + $cust = $mobile_user->getCustomer(); if ($cust == null) - { - $res->setError(true) - ->setErrorMessage('No customer information found'); - return $res->getReturnResponse(); - } + return new APIResponse(false, 'No customer information found'); - $ongoing_jos = $this->getOngoingJobOrders($cust, $em); + $ongoing_jos = $mah->getOngoingJobOrders($cust); + $data = []; if (count($ongoing_jos) <= 0) { try @@ -68,10 +75,10 @@ class RiderController extends APIController catch (Exception $e) { // no pending - $res->setData([ - 'status' => APIRiderStatus::NO_PENDING_JO - ]); - return $res->getReturnResponse(); + $data[] = [ + 'status' => APIRiderStatus::NO_PENDING_JO, + ]; + return new APIResponse(true, 'No pending job order', $data); } // we got a recently fulfilled job order @@ -82,7 +89,7 @@ class RiderController extends APIController { $dest = $fulfill_jo->getCoordinates(); - $data = [ + $data[] = [ 'jo_id' => $fulfill_jo->getID(), 'service_type' => $fulfill_jo->getServiceType(), 'destination' => [ @@ -101,7 +108,9 @@ class RiderController extends APIController if ($rider->getImageFile() != null) $image_url = $url_prefix . '/uploads/' . $rider->getImageFile(); - $data['status'] = APIRiderStatus::RIDER_RATING; + $data[] = [ + 'status' => APIRiderStatus::RIDER_RATING + ]; // default rider location to hub $data['rider'] = [ 'id' => $rider->getID(), @@ -110,16 +119,15 @@ class RiderController extends APIController 'contact_num' => $rider->getContactNumber(), 'image_url' => $image_url, ]; - $res->setData($data); - return $res->getReturnResponse(); + return new APIResponse(true, 'Rider status found', $data); } } // no pending - $res->setData([ - 'status' => APIRiderStatus::NO_PENDING_JO - ]); - return $res->getReturnResponse(); + $data[] = [ + 'status' => APIRiderStatus::NO_PENDING_JO, + ]; + return new APIResponse(true, 'No pending job order', $data); } // get first jo that's pending @@ -174,77 +182,70 @@ class RiderController extends APIController 'lat' => $coord->getLatitude() ] ]; - $res->setData($data); - return $res->getReturnResponse(); + + return new APIResponse(true, 'Rider status found', $data); } - $res->setData($data); - - return $res->getReturnResponse(); + return new APIResponse(true, 'Rider status found', $data); } - // TODO: needs to be modified for mobile user - public function addRiderRating(Request $req, EntityManagerInterface $em) + public function addRiderRating(Request $req, EntityManagerInterface $em, + MobileAPIHandler $mah) { + $this->denyAccessUnlessGranted('mobile_rider.rating.add', null, 'No access.'); + $required_params = [ 'jo_id', 'rating', ]; - $res = $this->checkParamsAndKey($req, $em, $required_params); - if ($res->isError()) - return $res->getReturnResponse(); + + $msg = $this->checkRequiredParameters($req, $required_params); + if ($msg) + return new APIResponse(false, $msg); + + // get capi user to link to mobile user + $user_id = $this->getUser()->getID(); + + // get mobile user + $mobile_user = $mah->findMobileUser($user_id); + + if ($mobile_user == null) + return new APIResponse(false, 'No mobile user found.'); // get customer - $cust = $this->session->getCustomer(); + $cust = $mobile_user->getCustomer(); if ($cust == null) - { - $res->setError(true) - ->setErrorMessage('No customer information found'); - return $res->getReturnResponse(); - } + return new APIResponse(false, 'No customer information found'); // get job order $jo_id = $req->request->get('jo_id'); $jo = $em->getRepository(JobOrder::class)->find($jo_id); if ($jo == null) - { - $res->setError(true) - ->setErrorMessage('No job order found'); - return $res->getReturnResponse(); - } + return new APIResponse(false, 'No job order found'); // get rider $rider = $jo->getRider(); if ($rider == null) - { - $res->setError(true) - ->setErrorMessage('No rider found'); - return $res->getReturnResponse(); - } + return new APIResponse(false, 'No rider found'); // check that the customer owns the job order $jo_cust = $jo->getCustomer(); if ($jo_cust->getID() != $cust->getID()) - { - $res->setError(true) - ->setErrorMessage('Job order was not initiated by customer'); - return $res->getReturnResponse(); - } + return new APIResponse(false, 'Job order was not initiated by customer;'); // TODO: check job order status, if it's complete // add rider rating $rating_num = $req->request->get('rating', -1); + $data = []; // if rating is -1 if ($rating_num == -1) { $jo->setHasRiderRating(); $em->flush(); - $res->setData([]); - - return $res->getReturnResponse(); + return new APIResponse(false, 'No rider rating', $data); } @@ -267,102 +268,6 @@ class RiderController extends APIController // TODO: set average rating in rider entity - $res->setData([]); - - return $res->getReturnResponse(); - } - - protected function getOngoingJobOrders($cust, $em) - { - $ongoing_jos = $em->getRepository(JobOrder::class)->findBy([ - 'customer' => $cust, - 'status' => [JOStatus::PENDING, JOStatus::RIDER_ASSIGN, JOStatus::IN_TRANSIT, JOStatus::ASSIGNED, JOStatus::IN_PROGRESS], - ]); - - return $ongoing_jos; - } - - // TODO: since we broke the functions into separate files, we need - // to figure out how to make this accessible to all ResqAPI controllers - protected function checkParamsAndKey(Request $req, $em, $params) - { - // TODO: depends on what we decide to return - // returns APIResult object - $res = new APIResult(); - - // check for api_key in query string - $api_key = $req->query->get('api_key'); - if (empty($api_key)) - { - $res->setError(true) - ->setErrorMessage('Missing API key'); - return $res; - } - - // check missing parameters - $missing = $this->checkMissingParameters($req, $params); - if (count($missing) > 0) - { - $miss_string = implode(', ', $missing); - $res->setError(true) - ->setErrorMessage('Missing parameter(s): ' . $miss_string); - return $res; - } - - // check api key - $mobile_user = $this->checkAPIKey($em, $req->query->get('api_key')); - if ($mobile_user == null) - { - $res->setError(true) - ->setErrorMessage('Invalid API Key'); - return $res; - } - - // store session - $this->session = $sess; - - return $res; - } - - // TODO: this might not be needed if we use APIController's checkRequiredParameters - // or we put this into a service? - protected function checkMissingParameters(Request $req, $params = []) - { - $missing = []; - - // check if parameters are there - foreach ($params as $param) - { - if ($req->getMethod() == 'GET') - { - $check = $req->query->get($param); - if (empty($check)) - $missing[] = $param; - } - else if ($req->getMethod() == 'POST') - { - $check = $req->request->get($param); - if (empty($check)) - $missing[] = $param; - } - else - return $params; - } - - return $missing; - } - - // TODO: type hint entity manager - // TODO: since we broke the functions into separate files, we need - // to figure out how to make this accessible to all ResqAPI controllers - protected function checkAPIKey($em, $api_key) - { - // find the api key (session id) - // TODO: user validation needs to be changed - $m_user = $em->getRepository(MobileUser::class)->find($api_key); - if ($m_user == null) - return null; - - return $m_user; + return new APIResponse(true, 'Rider rating added', $data); } } diff --git a/src/Controller/ResqAPI/ServiceController.php b/src/Controller/ResqAPI/ServiceController.php index 855aea92..e1b45dfa 100644 --- a/src/Controller/ResqAPI/ServiceController.php +++ b/src/Controller/ResqAPI/ServiceController.php @@ -41,7 +41,7 @@ class ServiceController extends APIController $user_id = $this->getUser()->getID(); // get mobile user - $mobile_user = $mah->findMobileUser($em, $user_id); + $mobile_user = $mah->findMobileUser($user_id); if ($mobile_user == null) return new APIResponse(false, 'No mobile user found.'); diff --git a/src/Controller/ResqAPI/VehicleController.php b/src/Controller/ResqAPI/VehicleController.php index eb67b1fd..3f949aec 100644 --- a/src/Controller/ResqAPI/VehicleController.php +++ b/src/Controller/ResqAPI/VehicleController.php @@ -42,7 +42,7 @@ class VehicleController extends APIController $user_id = $this->getUser()->getID(); // get mobile user - $mobile_user = $mah->findMobileUser($em, $user_id); + $mobile_user = $mah->findMobileUser($user_id); if ($mobile_user == null) return new APIResponse(false, 'No mobile user found.'); @@ -80,7 +80,7 @@ class VehicleController extends APIController $user_id = $this->getUser()->getID(); // get mobile user - $mobile_user = $mah->findMobileUser($em, $user_id); + $mobile_user = $mah->findMobileUser($user_id); if ($mobile_user == null) return new APIResponse(false, 'No mobile user found.'); diff --git a/src/Service/MobileAPIHandler.php b/src/Service/MobileAPIHandler.php index 4563eeff..124e4bfc 100644 --- a/src/Service/MobileAPIHandler.php +++ b/src/Service/MobileAPIHandler.php @@ -6,6 +6,9 @@ use Doctrine\ORM\EntityManagerInterface; use App\Entity\MobileUser; use App\Entity\Warranty; +use App\Entity\JobOrder; + +use App\Ramcar\JOStatus; class MobileAPIHandler { @@ -16,19 +19,19 @@ class MobileAPIHandler $this->em = $em; } - public function findMobileUser($em, $user_id) + public function findMobileUser($user_id) { // get capi user to link to mobile user - $mobile_user = $em->getRepository(MobileUser::class)->findOneBy(['capi_user_id' => $user_id]); + $mobile_user = $this->em->getRepository(MobileUser::class)->findOneBy(['capi_user_id' => $user_id]); return $mobile_user; } - public function findWarranty($plate_number, $em) + public function findWarranty($plate_number) { // NOTE: Modify the search for the latest warranty. This seems hacky. // get latest warranty using plate number - $warranty_results = $em->getRepository(Warranty::class)->findBy(['plate_number' => $plate_number], + $warranty_results = $this->em->getRepository(Warranty::class)->findBy(['plate_number' => $plate_number], ['date_create' => 'desc']); $warr = []; @@ -95,5 +98,13 @@ class MobileAPIHandler return $file_path; } + public function getOngoingJobOrders($cust) + { + $ongoing_jos = $this->em->getRepository(JobOrder::class)->findBy([ + 'customer' => $cust, + 'status' => [JOStatus::PENDING, JOStatus::RIDER_ASSIGN, JOStatus::IN_TRANSIT, JOStatus::ASSIGNED, JOStatus::IN_PROGRESS], + ]); + return $ongoing_jos; + } }