From 973c56ae85ff3890de84077c0d9be4ab353a09e1 Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Wed, 11 Aug 2021 10:20:53 +0000 Subject: [PATCH 1/3] Add new API calls. #612 --- config/routes/rider_api.yaml | 31 +++ src/Ramcar/JOEventType.php | 28 ++- .../RiderAPIHandler/ResqRiderAPIHandler.php | 206 +++++++++++++++++- 3 files changed, 254 insertions(+), 11 deletions(-) diff --git a/config/routes/rider_api.yaml b/config/routes/rider_api.yaml index bd38c492..b38cd6ae 100644 --- a/config/routes/rider_api.yaml +++ b/config/routes/rider_api.yaml @@ -64,3 +64,34 @@ rapi_available: path: /rapi/available controller: App\Controller\RAPIController::available methods: [POST] + +rapi_hub_depart: + path: /rapi/hub_depart + controller: App\Controller\RAPIController::hubDepart + methods: [POST] + +rapi_pre_hub_depart: + path: /rapi/pre_hub_depart + controller: App\Controller\RAPIController::preHubDepart + methods: [POST] + +rapi_pre_hub_arrive: + path: /rapi/pre_hub_arrive + controller: App\Controller\RAPIController::preHubArrive + methods: [POST] + +rapi_post_hub_depart: + path: /rapi/post_hub_depart + controller: App\Controller\RAPIController::postHubDepart + methods: [POST] + +rapi_post_hub_arrive: + path: /rapi/post_hub_arrive + controller: App\Controller\RAPIController::postHubArrive + methods: [POST] + +rapi_jo_start: + path: /rapi/start + controller: App\Controller\RAPIController::startJobOrder + methods: [POST] + diff --git a/src/Ramcar/JOEventType.php b/src/Ramcar/JOEventType.php index 3929c24e..e530679d 100644 --- a/src/Ramcar/JOEventType.php +++ b/src/Ramcar/JOEventType.php @@ -4,16 +4,24 @@ namespace App\Ramcar; class JOEventType extends NameValue { - const CREATE = 'create'; - const HUB_ASSIGN = 'hub_assign'; - const RIDER_ASSIGN = 'rider_assign'; - const CANCEL = 'cancel'; - const FULFILL = 'fulfill'; - const OPEN_EDIT = 'open_edit'; - const REQUEUE = 'requeue'; - const RIDER_ACCEPT = 'accept'; - const RIDER_ARRIVE = 'arrive'; - const RIDER_EDIT = 'rider_edit'; + const CREATE = 'create'; + const HUB_ASSIGN = 'hub_assign'; + const RIDER_ASSIGN = 'rider_assign'; + const CANCEL = 'cancel'; + const FULFILL = 'fulfill'; + const OPEN_EDIT = 'open_edit'; + const REQUEUE = 'requeue'; + const RIDER_ACCEPT = 'accept'; + const RIDER_ARRIVE = 'arrive'; + const RIDER_EDIT = 'rider_edit'; + const RIDER_DEPART_HUB = 'rider_depart_hub'; + const RIDER_ARRIVE_HUB_PRE_JO = 'rider_arrive_hub_pre_jo'; + const RIDER_DEPART_HUB_PRE_JO = 'rider_depart_hub_pre_jo'; + const RIDER_START = 'rider_start'; + const RIDER_END = 'rider_end'; + const RIDER_ARRIVE_HUB_POST_JO = 'rider_arrive_hub_post_jo'; + const RIDER_DEPART_HUB_POST_JO = 'rider_depart_hub_post_jo'; + const RIDER_ARRIVE_HUB = 'rider_arrive_hub'; const COLLECTION = [ 'create' => 'Created', diff --git a/src/Service/RiderAPIHandler/ResqRiderAPIHandler.php b/src/Service/RiderAPIHandler/ResqRiderAPIHandler.php index 10678139..d7cc762d 100644 --- a/src/Service/RiderAPIHandler/ResqRiderAPIHandler.php +++ b/src/Service/RiderAPIHandler/ResqRiderAPIHandler.php @@ -544,8 +544,20 @@ class ResqRiderAPIHandler implements RiderAPIHandlerInterface ->setTypeID(JOEventType::FULFILL) ->setJobOrder($jo) ->setRider($rider); - $this->em->persist($event); + $timestamp_event = new JOEvent(); + $timestamp_event->setDateHappen(new DateTime()) + ->setTypeID(JOEventType::RIDER_END) + ->setJobOrder($jo) + ->setRider($rider); + + $this->em->persist($event); + $this->em->persist($timestamp_event); + + // NOTE: fix for the rider being assigned to other JO + // while on another JO. + // TODO: comment this out. Rider needs to be set to unavailable + // when rider accepts the JO // tag rider as unavailable $rider->setAvailable(false); @@ -845,6 +857,198 @@ class ResqRiderAPIHandler implements RiderAPIHandlerInterface return $data; } + public function hubDepart(Request $req) + { + $required_params = [ + 'jo_id' + ]; + $data = $this->checkParamsAndKey($req, $required_params); + if (isset($data['error'])) + return $data; + + // find job order. + // NOTE: Not using getActiveJobOrder since unsure if it is really being set + $jo_id = $req->request->get('jo_id'); + $jo = $this->em->getRepository(JobOrder::class)->find($jo_id); + if ($jo == null) + { + $data = [ + 'error' => 'No job order found.' + ]; + return $data; + } + + // create time stamp event for JO event + $rider = $this->session->getRider(); + $event = new JOEvent(); + $event->setDateHappen(new DateTime()) + ->setTypeID(JOEventType::RIDER_DEPART_HUB) + ->setJobOrder($jo) + ->setRider($rider); + + return $data; + } + + public function preHubArrive(Request $req) + { + $required_params = [ + 'jo_id' + ]; + $data = $this->checkParamsAndKey($req, $required_params); + if (isset($data['error'])) + return $data; + + // find job order. + // NOTE: Not using getActiveJobOrder since unsure if it is really being set + $jo_id = $req->request->get('jo_id'); + $jo = $this->em->getRepository(JobOrder::class)->find($jo_id); + if ($jo == null) + { + $data = [ + 'error' => 'No job order found.' + ]; + return $data; + } + + // create time stamp event for JO event + $rider = $this->session->getRider(); + $event = new JOEvent(); + $event->setDateHappen(new DateTime()) + ->setTypeID(JOEventType::RIDER_ARRIVE_HUB_PRE_JO) + ->setJobOrder($jo) + ->setRider($rider); + + return $data; + } + + public function preHubDepart(Request $req) + { + $required_params = [ + 'jo_id' + ]; + $data = $this->checkParamsAndKey($req, $required_params); + if (isset($data['error'])) + return $data; + + // find job order. + // NOTE: Not using getActiveJobOrder since unsure if it is really being set + $jo_id = $req->request->get('jo_id'); + $jo = $this->em->getRepository(JobOrder::class)->find($jo_id); + if ($jo == null) + { + $data = [ + 'error' => 'No job order found.' + ]; + return $data; + } + + // create time stamp event for JO event + $rider = $this->session->getRider(); + $event = new JOEvent(); + $event->setDateHappen(new DateTime()) + ->setTypeID(JOEventType::RIDER_DEPART_HUB_PRE_JO) + ->setJobOrder($jo) + ->setRider($rider); + + return $data; + } + + public function startJobOrder(Request $req) + { + $required_params = [ + 'jo_id' + ]; + $data = $this->checkParamsAndKey($req, $required_params); + if (isset($data['error'])) + return $data; + + // find job order. + // NOTE: Not using getActiveJobOrder since unsure if it is really being set + $jo_id = $req->request->get('jo_id'); + $jo = $this->em->getRepository(JobOrder::class)->find($jo_id); + if ($jo == null) + { + $data = [ + 'error' => 'No job order found.' + ]; + return $data; + } + + // create time stamp event for JO event + $rider = $this->session->getRider(); + $event = new JOEvent(); + $event->setDateHappen(new DateTime()) + ->setTypeID(JOEventType::RIDER_START) + ->setJobOrder($jo) + ->setRider($rider); + + return $data; + } + + public function postHubArrive(Request $req) + { + $required_params = [ + 'jo_id' + ]; + $data = $this->checkParamsAndKey($req, $required_params); + if (isset($data['error'])) + return $data; + + // find job order. + // NOTE: Not using getActiveJobOrder since unsure if it is really being set + $jo_id = $req->request->get('jo_id'); + $jo = $this->em->getRepository(JobOrder::class)->find($jo_id); + if ($jo == null) + { + $data = [ + 'error' => 'No job order found.' + ]; + return $data; + } + + // create time stamp event for JO event + $rider = $this->session->getRider(); + $event = new JOEvent(); + $event->setDateHappen(new DateTime()) + ->setTypeID(JOEventType::RIDER_ARRIVE_HUB_POST_JO) + ->setJobOrder($jo) + ->setRider($rider); + + return $data; + } + + public function postHubDepart(Request $req) + { + $required_params = [ + 'jo_id' + ]; + $data = $this->checkParamsAndKey($req, $required_params); + if (isset($data['error'])) + return $data; + + // find job order. + // NOTE: Not using getActiveJobOrder since unsure if it is really being set + $jo_id = $req->request->get('jo_id'); + $jo = $this->em->getRepository(JobOrder::class)->find($jo_id); + if ($jo == null) + { + $data = [ + 'error' => 'No job order found.' + ]; + return $data; + } + + // create time stamp event for JO event + $rider = $this->session->getRider(); + $event = new JOEvent(); + $event->setDateHappen(new DateTime()) + ->setTypeID(JOEventType::RIDER_DEPART_HUB_POST_JO) + ->setJobOrder($jo) + ->setRider($rider); + + return $data; + } + protected function checkMissingParameters(Request $req, $params = []) { $missing = []; From 072a2df5d1b3a94b5e17ff3e4a11e1e7166ca340 Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Thu, 12 Aug 2021 09:05:21 +0000 Subject: [PATCH 2/3] Fixes found during testing. #612 --- src/Controller/RAPIController.php | 23 +++++++++++++++++++ .../RiderAPIHandler/ResqRiderAPIHandler.php | 19 +++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/src/Controller/RAPIController.php b/src/Controller/RAPIController.php index 3b8bdab1..40635743 100644 --- a/src/Controller/RAPIController.php +++ b/src/Controller/RAPIController.php @@ -300,4 +300,27 @@ class RAPIController extends Controller // response return $res->getReturnResponse(); } + + public function hubDepart(Request $req, RiderAPIHandlerInterface $rapi_handler) + { + $res = new APIResult(); + + $data = $rapi_handler->hubDepart($req); + + if (isset($data['error'])) + { + $message = $data['error']; + + $res->setError(true) + ->setErrorMessage($message); + } + else + { + $res->setData($data); + } + + // response + return $res->getReturnResponse(); + } + } diff --git a/src/Service/RiderAPIHandler/ResqRiderAPIHandler.php b/src/Service/RiderAPIHandler/ResqRiderAPIHandler.php index d7cc762d..c816b6d1 100644 --- a/src/Service/RiderAPIHandler/ResqRiderAPIHandler.php +++ b/src/Service/RiderAPIHandler/ResqRiderAPIHandler.php @@ -33,6 +33,7 @@ use App\Entity\Promo; use App\Entity\Battery; use App\Entity\BatteryModel; use App\Entity\BatterySize; +use App\Entity\JobOrder; use DateTime; @@ -886,6 +887,9 @@ class ResqRiderAPIHandler implements RiderAPIHandlerInterface ->setJobOrder($jo) ->setRider($rider); + $this->em->persist($event); + $this->em->flush(); + return $data; } @@ -918,6 +922,9 @@ class ResqRiderAPIHandler implements RiderAPIHandlerInterface ->setJobOrder($jo) ->setRider($rider); + $this->em->persist($event); + $this->em->flush(); + return $data; } @@ -950,6 +957,9 @@ class ResqRiderAPIHandler implements RiderAPIHandlerInterface ->setJobOrder($jo) ->setRider($rider); + $this->em->persist($event); + $this->em->flush(); + return $data; } @@ -982,6 +992,9 @@ class ResqRiderAPIHandler implements RiderAPIHandlerInterface ->setJobOrder($jo) ->setRider($rider); + $this->em->persist($event); + $this->em->flush(); + return $data; } @@ -1014,6 +1027,9 @@ class ResqRiderAPIHandler implements RiderAPIHandlerInterface ->setJobOrder($jo) ->setRider($rider); + $this->em->persist($event); + $this->em->flush(); + return $data; } @@ -1046,6 +1062,9 @@ class ResqRiderAPIHandler implements RiderAPIHandlerInterface ->setJobOrder($jo) ->setRider($rider); + $this->em->persist($event); + $this->em->flush(); + return $data; } From d78a5ebf804d7e35d57025e47ffa5fa0b62da81b Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Fri, 13 Aug 2021 08:08:59 +0000 Subject: [PATCH 3/3] Add rider current job order field. #612 --- src/Controller/RAPIController.php | 109 +++++++++++++ src/Entity/Rider.php | 21 +++ .../RiderAPIHandler/ResqRiderAPIHandler.php | 146 +++++++----------- 3 files changed, 189 insertions(+), 87 deletions(-) diff --git a/src/Controller/RAPIController.php b/src/Controller/RAPIController.php index 40635743..a818e9a7 100644 --- a/src/Controller/RAPIController.php +++ b/src/Controller/RAPIController.php @@ -323,4 +323,113 @@ class RAPIController extends Controller return $res->getReturnResponse(); } + public function preHubArrive(Request $req, RiderAPIHandlerInterface $rapi_handler) + { + $res = new APIResult(); + + $data = $rapi_handler->preHubArrive($req); + + if (isset($data['error'])) + { + $message = $data['error']; + + $res->setError(true) + ->setErrorMessage($message); + } + else + { + $res->setData($data); + } + + // response + return $res->getReturnResponse(); + } + + public function preHubDepart(Request $req, RiderAPIHandlerInterface $rapi_handler) + { + $res = new APIResult(); + + $data = $rapi_handler->preHubDepart($req); + + if (isset($data['error'])) + { + $message = $data['error']; + + $res->setError(true) + ->setErrorMessage($message); + } + else + { + $res->setData($data); + } + + // response + return $res->getReturnResponse(); + } + + public function postHubArrive(Request $req, RiderAPIHandlerInterface $rapi_handler) + { + $res = new APIResult(); + + $data = $rapi_handler->postHubArrive($req); + + if (isset($data['error'])) + { + $message = $data['error']; + + $res->setError(true) + ->setErrorMessage($message); + } + else + { + $res->setData($data); + } + + // response + return $res->getReturnResponse(); + } + + public function postHubDepart(Request $req, RiderAPIHandlerInterface $rapi_handler) + { + $res = new APIResult(); + + $data = $rapi_handler->postHubDepart($req); + + if (isset($data['error'])) + { + $message = $data['error']; + + $res->setError(true) + ->setErrorMessage($message); + } + else + { + $res->setData($data); + } + + // response + return $res->getReturnResponse(); + } + + public function startJobOrder(Request $req, RiderAPIHandlerInterface $rapi_handler) + { + $res = new APIResult(); + + $data = $rapi_handler->startJobOrder($req); + + if (isset($data['error'])) + { + $message = $data['error']; + + $res->setError(true) + ->setErrorMessage($message); + } + else + { + $res->setData($data); + } + + // response + return $res->getReturnResponse(); + } } diff --git a/src/Entity/Rider.php b/src/Entity/Rider.php index 502d93bc..8a2ed9ea 100644 --- a/src/Entity/Rider.php +++ b/src/Entity/Rider.php @@ -120,6 +120,15 @@ class Rider */ protected $sessions; + // current job order + // NOTE: for forgotten reasons, we don't set active_job_order. + // but we now need rider's current JO for the time stamp events + /** + * @ORM\OneToOne(targetEntity="JobOrder") + * @ORM\JoinColumn(name="current_jo_id", referencedColumnName="id") + */ + protected $current_job_order; + public function __construct() { $this->job_orders = new ArrayCollection(); @@ -132,6 +141,7 @@ class Rider $this->password = ''; $this->active_job_order = null; + $this->current_job_order = null; } public function getID() @@ -371,4 +381,15 @@ class Rider $map_label = $this->first_name .' ' . $this->last_name; return $map_label; } + + public function setCurrentJobOrder(JobOrder $jo = null) + { + $this->current_job_order = $jo; + return $this; + } + + public function getCurrentJobOrder() + { + return $this->current_job_order; + } } diff --git a/src/Service/RiderAPIHandler/ResqRiderAPIHandler.php b/src/Service/RiderAPIHandler/ResqRiderAPIHandler.php index c816b6d1..db83076b 100644 --- a/src/Service/RiderAPIHandler/ResqRiderAPIHandler.php +++ b/src/Service/RiderAPIHandler/ResqRiderAPIHandler.php @@ -409,8 +409,15 @@ class ResqRiderAPIHandler implements RiderAPIHandlerInterface // TODO: send mqtt event (?) - // add event log $rider = $this->session->getRider(); + + // set rider's current job order + $rider->setCurrentJobOrder($jo); + + // set rider to unavailable + $rider->setAvailable(false); + + // add event log $event = new JOEvent(); $event->setDateHappen(new DateTime()) ->setTypeID(JOEventType::RIDER_ACCEPT) @@ -434,8 +441,11 @@ class ResqRiderAPIHandler implements RiderAPIHandlerInterface // requeue it, instead of cancelling it $jo->requeue(); - // add event log $rider = $this->session->getRider(); + // set rider's current job order to null + $rider->setCurrentJobOrder(); + + // add event log $event = new JOEvent(); $event->setDateHappen(new DateTime()) ->setTypeID(JOEventType::REQUEUE) @@ -513,10 +523,26 @@ class ResqRiderAPIHandler implements RiderAPIHandlerInterface return $data; } + $rider = $this->session->getRider(); + + // get rider's current job order + $jo = $rider->getCurrentJobOrder(); + + $timestamp_event = new JOEvent(); + $timestamp_event->setDateHappen(new DateTime()) + ->setTypeID(JOEventType::RIDER_ARRIVE_HUB) + ->setJobOrder($jo) + ->setRider($rider); + + $this->em->persist($timestamp_event); + // tag rider as available $rider = $this->session->getRider(); $rider->setAvailable(true); + // set rider's current job order to null + $rider->setCurrentJobOrder(); + $this->em->flush(); return $data; @@ -860,24 +886,15 @@ class ResqRiderAPIHandler implements RiderAPIHandlerInterface public function hubDepart(Request $req) { - $required_params = [ - 'jo_id' - ]; + $required_params = []; $data = $this->checkParamsAndKey($req, $required_params); if (isset($data['error'])) return $data; - // find job order. - // NOTE: Not using getActiveJobOrder since unsure if it is really being set - $jo_id = $req->request->get('jo_id'); - $jo = $this->em->getRepository(JobOrder::class)->find($jo_id); - if ($jo == null) - { - $data = [ - 'error' => 'No job order found.' - ]; - return $data; - } + $rider = $this->session->getRider(); + + // get rider's current job order + $jo = $rider->getCurrentJobOrder(); // create time stamp event for JO event $rider = $this->session->getRider(); @@ -895,24 +912,15 @@ class ResqRiderAPIHandler implements RiderAPIHandlerInterface public function preHubArrive(Request $req) { - $required_params = [ - 'jo_id' - ]; + $required_params = []; $data = $this->checkParamsAndKey($req, $required_params); if (isset($data['error'])) return $data; - // find job order. - // NOTE: Not using getActiveJobOrder since unsure if it is really being set - $jo_id = $req->request->get('jo_id'); - $jo = $this->em->getRepository(JobOrder::class)->find($jo_id); - if ($jo == null) - { - $data = [ - 'error' => 'No job order found.' - ]; - return $data; - } + $rider = $this->session->getRider(); + + // get rider's current job order + $jo = $rider->getCurrentJobOrder(); // create time stamp event for JO event $rider = $this->session->getRider(); @@ -930,25 +938,16 @@ class ResqRiderAPIHandler implements RiderAPIHandlerInterface public function preHubDepart(Request $req) { - $required_params = [ - 'jo_id' - ]; + $required_params = []; $data = $this->checkParamsAndKey($req, $required_params); if (isset($data['error'])) return $data; - // find job order. - // NOTE: Not using getActiveJobOrder since unsure if it is really being set - $jo_id = $req->request->get('jo_id'); - $jo = $this->em->getRepository(JobOrder::class)->find($jo_id); - if ($jo == null) - { - $data = [ - 'error' => 'No job order found.' - ]; - return $data; - } - + $rider = $this->session->getRider(); + + // get rider's current job order + $jo = $rider->getCurrentJobOrder(); + // create time stamp event for JO event $rider = $this->session->getRider(); $event = new JOEvent(); @@ -965,24 +964,15 @@ class ResqRiderAPIHandler implements RiderAPIHandlerInterface public function startJobOrder(Request $req) { - $required_params = [ - 'jo_id' - ]; + $required_params = []; $data = $this->checkParamsAndKey($req, $required_params); if (isset($data['error'])) return $data; - // find job order. - // NOTE: Not using getActiveJobOrder since unsure if it is really being set - $jo_id = $req->request->get('jo_id'); - $jo = $this->em->getRepository(JobOrder::class)->find($jo_id); - if ($jo == null) - { - $data = [ - 'error' => 'No job order found.' - ]; - return $data; - } + $rider = $this->session->getRider(); + + // get rider's current job order + $jo = $rider->getCurrentJobOrder(); // create time stamp event for JO event $rider = $this->session->getRider(); @@ -1000,24 +990,15 @@ class ResqRiderAPIHandler implements RiderAPIHandlerInterface public function postHubArrive(Request $req) { - $required_params = [ - 'jo_id' - ]; + $required_params = []; $data = $this->checkParamsAndKey($req, $required_params); if (isset($data['error'])) return $data; - // find job order. - // NOTE: Not using getActiveJobOrder since unsure if it is really being set - $jo_id = $req->request->get('jo_id'); - $jo = $this->em->getRepository(JobOrder::class)->find($jo_id); - if ($jo == null) - { - $data = [ - 'error' => 'No job order found.' - ]; - return $data; - } + $rider = $this->session->getRider(); + + // get rider's current job order + $jo = $rider->getCurrentJobOrder(); // create time stamp event for JO event $rider = $this->session->getRider(); @@ -1035,24 +1016,15 @@ class ResqRiderAPIHandler implements RiderAPIHandlerInterface public function postHubDepart(Request $req) { - $required_params = [ - 'jo_id' - ]; + $required_params = []; $data = $this->checkParamsAndKey($req, $required_params); if (isset($data['error'])) return $data; - // find job order. - // NOTE: Not using getActiveJobOrder since unsure if it is really being set - $jo_id = $req->request->get('jo_id'); - $jo = $this->em->getRepository(JobOrder::class)->find($jo_id); - if ($jo == null) - { - $data = [ - 'error' => 'No job order found.' - ]; - return $data; - } + $rider = $this->session->getRider(); + + // get rider's current job order + $jo = $rider->getCurrentJobOrder(); // create time stamp event for JO event $rider = $this->session->getRider();