Merge branch '612-rider-revamp' of gitlab.com:jankstudio/resq into 617-migrate-rider-api

This commit is contained in:
Korina Cordero 2021-08-18 07:06:52 +00:00
commit 604f3aa200
5 changed files with 400 additions and 13 deletions

View file

@ -64,3 +64,34 @@ rapi_available:
path: /rapi/available path: /rapi/available
controller: App\Controller\RAPIController::available controller: App\Controller\RAPIController::available
methods: [POST] 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]

View file

@ -300,4 +300,136 @@ class RAPIController extends Controller
// response // response
return $res->getReturnResponse(); 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();
}
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();
}
} }

View file

@ -120,6 +120,15 @@ class Rider
*/ */
protected $sessions; 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() public function __construct()
{ {
$this->job_orders = new ArrayCollection(); $this->job_orders = new ArrayCollection();
@ -132,6 +141,7 @@ class Rider
$this->password = ''; $this->password = '';
$this->active_job_order = null; $this->active_job_order = null;
$this->current_job_order = null;
} }
public function getID() public function getID()
@ -371,4 +381,15 @@ class Rider
$map_label = $this->first_name .' ' . $this->last_name; $map_label = $this->first_name .' ' . $this->last_name;
return $map_label; return $map_label;
} }
public function setCurrentJobOrder(JobOrder $jo = null)
{
$this->current_job_order = $jo;
return $this;
}
public function getCurrentJobOrder()
{
return $this->current_job_order;
}
} }

View file

@ -4,16 +4,24 @@ namespace App\Ramcar;
class JOEventType extends NameValue class JOEventType extends NameValue
{ {
const CREATE = 'create'; const CREATE = 'create';
const HUB_ASSIGN = 'hub_assign'; const HUB_ASSIGN = 'hub_assign';
const RIDER_ASSIGN = 'rider_assign'; const RIDER_ASSIGN = 'rider_assign';
const CANCEL = 'cancel'; const CANCEL = 'cancel';
const FULFILL = 'fulfill'; const FULFILL = 'fulfill';
const OPEN_EDIT = 'open_edit'; const OPEN_EDIT = 'open_edit';
const REQUEUE = 'requeue'; const REQUEUE = 'requeue';
const RIDER_ACCEPT = 'accept'; const RIDER_ACCEPT = 'accept';
const RIDER_ARRIVE = 'arrive'; const RIDER_ARRIVE = 'arrive';
const RIDER_EDIT = 'rider_edit'; 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 = [ const COLLECTION = [
'create' => 'Created', 'create' => 'Created',

View file

@ -33,6 +33,7 @@ use App\Entity\Promo;
use App\Entity\Battery; use App\Entity\Battery;
use App\Entity\BatteryModel; use App\Entity\BatteryModel;
use App\Entity\BatterySize; use App\Entity\BatterySize;
use App\Entity\JobOrder;
use DateTime; use DateTime;
@ -408,8 +409,15 @@ class ResqRiderAPIHandler implements RiderAPIHandlerInterface
// TODO: send mqtt event (?) // TODO: send mqtt event (?)
// add event log
$rider = $this->session->getRider(); $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 = new JOEvent();
$event->setDateHappen(new DateTime()) $event->setDateHappen(new DateTime())
->setTypeID(JOEventType::RIDER_ACCEPT) ->setTypeID(JOEventType::RIDER_ACCEPT)
@ -433,8 +441,11 @@ class ResqRiderAPIHandler implements RiderAPIHandlerInterface
// requeue it, instead of cancelling it // requeue it, instead of cancelling it
$jo->requeue(); $jo->requeue();
// add event log
$rider = $this->session->getRider(); $rider = $this->session->getRider();
// set rider's current job order to null
$rider->setCurrentJobOrder();
// add event log
$event = new JOEvent(); $event = new JOEvent();
$event->setDateHappen(new DateTime()) $event->setDateHappen(new DateTime())
->setTypeID(JOEventType::REQUEUE) ->setTypeID(JOEventType::REQUEUE)
@ -512,10 +523,26 @@ class ResqRiderAPIHandler implements RiderAPIHandlerInterface
return $data; 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 // tag rider as available
$rider = $this->session->getRider(); $rider = $this->session->getRider();
$rider->setAvailable(true); $rider->setAvailable(true);
// set rider's current job order to null
$rider->setCurrentJobOrder();
$this->em->flush(); $this->em->flush();
return $data; return $data;
@ -544,8 +571,20 @@ class ResqRiderAPIHandler implements RiderAPIHandlerInterface
->setTypeID(JOEventType::FULFILL) ->setTypeID(JOEventType::FULFILL)
->setJobOrder($jo) ->setJobOrder($jo)
->setRider($rider); ->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 // tag rider as unavailable
$rider->setAvailable(false); $rider->setAvailable(false);
@ -845,6 +884,162 @@ class ResqRiderAPIHandler implements RiderAPIHandlerInterface
return $data; return $data;
} }
public function hubDepart(Request $req)
{
$required_params = [];
$data = $this->checkParamsAndKey($req, $required_params);
if (isset($data['error']))
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();
$event->setDateHappen(new DateTime())
->setTypeID(JOEventType::RIDER_DEPART_HUB)
->setJobOrder($jo)
->setRider($rider);
$this->em->persist($event);
$this->em->flush();
return $data;
}
public function preHubArrive(Request $req)
{
$required_params = [];
$data = $this->checkParamsAndKey($req, $required_params);
if (isset($data['error']))
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();
$event->setDateHappen(new DateTime())
->setTypeID(JOEventType::RIDER_ARRIVE_HUB_PRE_JO)
->setJobOrder($jo)
->setRider($rider);
$this->em->persist($event);
$this->em->flush();
return $data;
}
public function preHubDepart(Request $req)
{
$required_params = [];
$data = $this->checkParamsAndKey($req, $required_params);
if (isset($data['error']))
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();
$event->setDateHappen(new DateTime())
->setTypeID(JOEventType::RIDER_DEPART_HUB_PRE_JO)
->setJobOrder($jo)
->setRider($rider);
$this->em->persist($event);
$this->em->flush();
return $data;
}
public function startJobOrder(Request $req)
{
$required_params = [];
$data = $this->checkParamsAndKey($req, $required_params);
if (isset($data['error']))
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();
$event->setDateHappen(new DateTime())
->setTypeID(JOEventType::RIDER_START)
->setJobOrder($jo)
->setRider($rider);
$this->em->persist($event);
$this->em->flush();
return $data;
}
public function postHubArrive(Request $req)
{
$required_params = [];
$data = $this->checkParamsAndKey($req, $required_params);
if (isset($data['error']))
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();
$event->setDateHappen(new DateTime())
->setTypeID(JOEventType::RIDER_ARRIVE_HUB_POST_JO)
->setJobOrder($jo)
->setRider($rider);
$this->em->persist($event);
$this->em->flush();
return $data;
}
public function postHubDepart(Request $req)
{
$required_params = [];
$data = $this->checkParamsAndKey($req, $required_params);
if (isset($data['error']))
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();
$event->setDateHappen(new DateTime())
->setTypeID(JOEventType::RIDER_DEPART_HUB_POST_JO)
->setJobOrder($jo)
->setRider($rider);
$this->em->persist($event);
$this->em->flush();
return $data;
}
protected function checkMissingParameters(Request $req, $params = []) protected function checkMissingParameters(Request $req, $params = [])
{ {
$missing = []; $missing = [];