From becd8d0c179486d0dd563b8605405c5b83777ac1 Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Fri, 31 Jan 2020 06:21:35 +0000 Subject: [PATCH] Move acceptJobOrder to the service. #311 --- src/Controller/RAPIController.php | 35 ++++----- .../RiderAPIHandler/CMBRiderAPIHandler.php | 71 ++++++++++++++++++- .../RiderAPIHandler/ResqRiderAPIHandler.php | 71 ++++++++++++++++++- src/Service/RiderAPIHandlerInterface.php | 2 + 4 files changed, 156 insertions(+), 23 deletions(-) diff --git a/src/Controller/RAPIController.php b/src/Controller/RAPIController.php index 3e8c7191..75eaa796 100644 --- a/src/Controller/RAPIController.php +++ b/src/Controller/RAPIController.php @@ -269,32 +269,25 @@ class RAPIController extends Controller return $res; } - public function acceptJobOrder(Request $req) + public function acceptJobOrder(Request $req, RiderAPIHandlerInterface $rapi_handler) { - $em = $this->getDoctrine()->getManager(); - $required_params = ['jo_id']; - $res = $this->checkJO($req, $required_params, $jo); - if ($res->isError()) - return $res->getReturnResponse(); + $res = new APIResult(); - // TODO: refactor this into a jo handler class, so we don't have to repeat for control center + $data = $rapi_handler->acceptJobOrder($req); - // set jo status to in transit - $jo->setStatus(JOStatus::IN_TRANSIT); - - // TODO: send mqtt event (?) + if (isset($data['error'])) + { + $message = $data['error']; - // add event log - $rider = $this->session->getRider(); - $event = new JOEvent(); - $event->setDateHappen(new DateTime()) - ->setTypeID(JOEventType::RIDER_ACCEPT) - ->setJobOrder($jo) - ->setRider($rider); - $em->persist($event); - - $em->flush(); + $res->setError(true) + ->setErrorMessage($message); + } + else + { + $res->setData($data); + } + // response return $res->getReturnResponse(); } diff --git a/src/Service/RiderAPIHandler/CMBRiderAPIHandler.php b/src/Service/RiderAPIHandler/CMBRiderAPIHandler.php index b45caf1c..cef5e10f 100644 --- a/src/Service/RiderAPIHandler/CMBRiderAPIHandler.php +++ b/src/Service/RiderAPIHandler/CMBRiderAPIHandler.php @@ -339,6 +339,35 @@ class CMBRiderAPIHandler implements RiderAPIHandlerInterface return $data; } + public function acceptJobOrder(Request $req) + { + $required_params = ['jo_id']; + $data = $this->checkJO($req, $required_params, $jo); + if (isset($data['error'])) + return $data; + + // TODO: refactor this into a jo handler class, so we don't have to repeat for control center + + // set jo status to in transit + $jo->setStatus(JOStatus::IN_TRANSIT); + + // TODO: send mqtt event (?) + + // add event log + $rider = $this->session->getRider(); + $event = new JOEvent(); + $event->setDateHappen(new DateTime()) + ->setTypeID(JOEventType::RIDER_ACCEPT) + ->setJobOrder($jo) + ->setRider($rider); + $this->em->persist($event); + + $this->em->flush(); + + return $data; + + } + protected function checkMissingParameters(Request $req, $params = []) { $missing = []; @@ -406,7 +435,6 @@ class CMBRiderAPIHandler implements RiderAPIHandlerInterface return $data; } - // TODO: type hint entity manager protected function checkAPIKey($api_key) { // find the api key (session id) @@ -416,4 +444,45 @@ class CMBRiderAPIHandler implements RiderAPIHandlerInterface return $session; } + + protected function checkJO(Request $req, $required_params, &$jo = null) + { + // set jo status to in transit + $data = $this->checkParamsAndKey($req, $required_params); + if (isset($data['error'])) + return $data; + + // are we logged in? + if (!$this->session->hasRider()) + { + $data = [ + 'error' => 'No logged in rider.' + ]; + return $data; + } + + $rider = $this->session->getRider(); + + // check if we have an active JO + $jo = $rider->getActiveJobOrder(); + if ($jo == null) + { + $data = [ + 'error' => 'No active job order.' + ]; + return $data; + } + + // check if the jo_id sent is the same as our active jo + if ($req->request->get('jo_id') != $jo->getID()) + { + $data = [ + 'error' => 'Job order selected is not active job order.' + ]; + return $data; + } + + return $data; + } + } diff --git a/src/Service/RiderAPIHandler/ResqRiderAPIHandler.php b/src/Service/RiderAPIHandler/ResqRiderAPIHandler.php index e6074145..de36bdf1 100644 --- a/src/Service/RiderAPIHandler/ResqRiderAPIHandler.php +++ b/src/Service/RiderAPIHandler/ResqRiderAPIHandler.php @@ -339,6 +339,35 @@ class ResqRiderAPIHandler implements RiderAPIHandlerInterface return $data; } + public function acceptJobOrder(Request $req) + { + $required_params = ['jo_id']; + $data = $this->checkJO($req, $required_params, $jo); + if (isset($data['error'])) + return $data; + + // TODO: refactor this into a jo handler class, so we don't have to repeat for control center + + // set jo status to in transit + $jo->setStatus(JOStatus::IN_TRANSIT); + + // TODO: send mqtt event (?) + + // add event log + $rider = $this->session->getRider(); + $event = new JOEvent(); + $event->setDateHappen(new DateTime()) + ->setTypeID(JOEventType::RIDER_ACCEPT) + ->setJobOrder($jo) + ->setRider($rider); + $this->em->persist($event); + + $this->em->flush(); + + return $data; + + } + protected function checkMissingParameters(Request $req, $params = []) { $missing = []; @@ -406,7 +435,6 @@ class ResqRiderAPIHandler implements RiderAPIHandlerInterface return $data; } - // TODO: type hint entity manager protected function checkAPIKey($api_key) { // find the api key (session id) @@ -416,4 +444,45 @@ class ResqRiderAPIHandler implements RiderAPIHandlerInterface return $session; } + + protected function checkJO(Request $req, $required_params, &$jo = null) + { + // set jo status to in transit + $data = $this->checkParamsAndKey($req, $required_params); + if (isset($data['error'])) + return $data; + + // are we logged in? + if (!$this->session->hasRider()) + { + $data = [ + 'error' => 'No logged in rider.' + ]; + return $data; + } + + $rider = $this->session->getRider(); + + // check if we have an active JO + $jo = $rider->getActiveJobOrder(); + if ($jo == null) + { + $data = [ + 'error' => 'No active job order.' + ]; + return $data; + } + + // check if the jo_id sent is the same as our active jo + if ($req->request->get('jo_id') != $jo->getID()) + { + $data = [ + 'error' => 'Job order selected is not active job order.' + ]; + return $data; + } + + return $data; + } + } diff --git a/src/Service/RiderAPIHandlerInterface.php b/src/Service/RiderAPIHandlerInterface.php index 49e26751..075705e0 100644 --- a/src/Service/RiderAPIHandlerInterface.php +++ b/src/Service/RiderAPIHandlerInterface.php @@ -13,4 +13,6 @@ interface RiderAPIHandlerInterface public function logout(Request $req); public function getJobOrder(Request $req); + + public function acceptJobOrder(Request $req); }