Modify RiderController. Fix calls to MobileAPIHandler. #591

This commit is contained in:
Korina Cordero 2021-07-09 07:33:23 +00:00
parent 8408c1e96a
commit fb63fd80ac
9 changed files with 107 additions and 183 deletions

View file

@ -134,3 +134,10 @@ access_keys:
label: Get Partner Info label: Get Partner Info
- id: mobile_partner.review - id: mobile_partner.review
label: Add 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

View file

@ -42,7 +42,7 @@ class BatteryController extends APIController
$user_id = $this->getUser()->getID(); $user_id = $this->getUser()->getID();
// get mobile user // get mobile user
$mobile_user = $mah->findMobileUser($em, $user_id); $mobile_user = $mah->findMobileUser($user_id);
if ($mobile_user == null) if ($mobile_user == null)
return new APIResponse(false, 'No mobile user found.'); return new APIResponse(false, 'No mobile user found.');

View file

@ -55,7 +55,7 @@ class CustomerController extends APIController
$user_id = $this->getUser()->getID(); $user_id = $this->getUser()->getID();
// check if capi user already has a mobile user // 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) if ($mobile_user != null)
return new APIResponse(false, 'User already registered'); return new APIResponse(false, 'User already registered');
@ -126,7 +126,7 @@ class CustomerController extends APIController
$user_id = $this->getUser()->getID(); $user_id = $this->getUser()->getID();
// get mobile user // get mobile user
$mobile_user = $mah->findMobileUser($em, $user_id); $mobile_user = $mah->findMobileUser($user_id);
if ($mobile_user == null) if ($mobile_user == null)
return new APIResponse(false, 'No mobile user found.'); return new APIResponse(false, 'No mobile user found.');
@ -140,6 +140,7 @@ class CustomerController extends APIController
$otp_mode = $_ENV['OTP_MODE']; $otp_mode = $_ENV['OTP_MODE'];
$data = [];
// check for hardcoded phone number for app store testing // check for hardcoded phone number for app store testing
if ($phone_number == '639221111111') if ($phone_number == '639221111111')
{ {
@ -200,7 +201,7 @@ class CustomerController extends APIController
$user_id = $this->getUser()->getID(); $user_id = $this->getUser()->getID();
// get mobile user // get mobile user
$mobile_user = $mah->findMobileUser($em, $user_id); $mobile_user = $mah->findMobileUser($user_id);
if ($mobile_user == null) if ($mobile_user == null)
return new APIResponse(false, 'No mobile user found.'); return new APIResponse(false, 'No mobile user found.');
@ -246,7 +247,7 @@ class CustomerController extends APIController
$user_id = $this->getUser()->getID(); $user_id = $this->getUser()->getID();
// get mobile user // get mobile user
$mobile_user = $mah->findMobileUser($em, $user_id); $mobile_user = $mah->findMobileUser($user_id);
if ($mobile_user == null) if ($mobile_user == null)
return new APIResponse(false, 'No mobile user found.'); return new APIResponse(false, 'No mobile user found.');
@ -295,7 +296,7 @@ class CustomerController extends APIController
$user_id = $this->getUser()->getID(); $user_id = $this->getUser()->getID();
// get mobile user // get mobile user
$mobile_user = $mah->findMobileUser($em, $user_id); $mobile_user = $mah->findMobileUser($user_id);
if ($mobile_user == null) if ($mobile_user == null)
return new APIResponse(false, 'No mobile user found.'); return new APIResponse(false, 'No mobile user found.');
@ -329,7 +330,7 @@ class CustomerController extends APIController
$user_id = $this->getUser()->getID(); $user_id = $this->getUser()->getID();
// get mobile user // get mobile user
$mobile_user = $mah->findMobileUser($em, $user_id); $mobile_user = $mah->findMobileUser($user_id);
if ($mobile_user == null) if ($mobile_user == null)
return new APIResponse(false, 'No mobile user found.'); return new APIResponse(false, 'No mobile user found.');
@ -353,7 +354,7 @@ class CustomerController extends APIController
$user_id = $this->getUser()->getID(); $user_id = $this->getUser()->getID();
// get mobile user // get mobile user
$mobile_user = $mah->findMobileUser($em, $user_id); $mobile_user = $mah->findMobileUser($user_id);
if ($mobile_user == null) if ($mobile_user == null)
return new APIResponse(false, 'No mobile user found.'); return new APIResponse(false, 'No mobile user found.');
@ -391,7 +392,7 @@ class CustomerController extends APIController
$user_id = $this->getUser()->getID(); $user_id = $this->getUser()->getID();
// get mobile user // get mobile user
$mobile_user = $mah->findMobileUser($em, $user_id); $mobile_user = $mah->findMobileUser($user_id);
if ($mobile_user == null) if ($mobile_user == null)
return new APIResponse(false, 'No mobile user found.'); return new APIResponse(false, 'No mobile user found.');
@ -441,7 +442,7 @@ class CustomerController extends APIController
$user_id = $this->getUser()->getID(); $user_id = $this->getUser()->getID();
// get mobile user // get mobile user
$mobile_user = $mah->findMobileUser($em, $user_id); $mobile_user = $mah->findMobileUser($user_id);
if ($mobile_user == null) if ($mobile_user == null)
return new APIResponse(false, 'No mobile user found.'); return new APIResponse(false, 'No mobile user found.');
@ -473,7 +474,7 @@ class CustomerController extends APIController
$user_id = $this->getUser()->getID(); $user_id = $this->getUser()->getID();
// get mobile user // get mobile user
$mobile_user = $mah->findMobileUser($em, $user_id); $mobile_user = $mah->findMobileUser($user_id);
if ($mobile_user == null) if ($mobile_user == null)
return new APIResponse(false, 'No mobile user found.'); return new APIResponse(false, 'No mobile user found.');

View file

@ -43,7 +43,7 @@ class CustomerVehicleController extends APIController
$user_id = $this->getUser()->getID(); $user_id = $this->getUser()->getID();
// get mobile user // get mobile user
$mobile_user = $mah->findMobileUser($em, $user_id); $mobile_user = $mah->findMobileUser($user_id);
if ($mobile_user == null) if ($mobile_user == null)
return new APIResponse(false, 'No mobile user found.'); return new APIResponse(false, 'No mobile user found.');
@ -72,7 +72,7 @@ class CustomerVehicleController extends APIController
$user_id = $this->getUser()->getID(); $user_id = $this->getUser()->getID();
// get mobile user // get mobile user
$mobile_user = $mah->findMobileUser($em, $user_id); $mobile_user = $mah->findMobileUser($user_id);
// get customer vehicle // get customer vehicle
$cv = $em->getRepository(CustomerVehicle::class)->find($id); $cv = $em->getRepository(CustomerVehicle::class)->find($id);
@ -107,7 +107,7 @@ class CustomerVehicleController extends APIController
$user_id = $this->getUser()->getID(); $user_id = $this->getUser()->getID();
// get mobile user // get mobile user
$mobile_user = $mah->findMobileUser($em, $user_id); $mobile_user = $mah->findMobileUser($user_id);
if ($mobile_user == null) if ($mobile_user == null)
return new APIResponse(false, 'No mobile user found.'); return new APIResponse(false, 'No mobile user found.');
@ -129,7 +129,7 @@ class CustomerVehicleController extends APIController
if ($cv->getWarrantyExpiration() != null) if ($cv->getWarrantyExpiration() != null)
$wty_ex = $cv->getWarrantyExpiration()->format('Y-m-d'); $wty_ex = $cv->getWarrantyExpiration()->format('Y-m-d');
$warranty = $mah->findWarranty($cv->getPlateNumber(), $em); $warranty = $mah->findWarranty($cv->getPlateNumber());
$cv_name = ''; $cv_name = '';
if ($cv->getName() != null) if ($cv->getName() != null)

View file

@ -47,7 +47,7 @@ class PartnerController extends APIController
$user_id = $this->getUser()->getID(); $user_id = $this->getUser()->getID();
// get mobile user // get mobile user
$mobile_user = $mah->findMobileUser($em, $user_id); $mobile_user = $mah->findMobileUser($user_id);
if ($mobile_user == null) if ($mobile_user == null)
return new APIResponse(false, 'No mobile user found.'); return new APIResponse(false, 'No mobile user found.');
@ -105,7 +105,7 @@ class PartnerController extends APIController
$user_id = $this->getUser()->getID(); $user_id = $this->getUser()->getID();
// get mobile user // get mobile user
$mobile_user = $mah->findMobileUser($em, $user_id); $mobile_user = $mah->findMobileUser($user_id);
if ($mobile_user == null) if ($mobile_user == null)
return new APIResponse(false, 'No mobile user found.'); return new APIResponse(false, 'No mobile user found.');
@ -165,7 +165,7 @@ class PartnerController extends APIController
$user_id = $this->getUser()->getID(); $user_id = $this->getUser()->getID();
// get mobile user // get mobile user
$mobile_user = $mah->findMobileUser($em, $user_id); $mobile_user = $mah->findMobileUser($user_id);
if ($mobile_user == null) if ($mobile_user == null)
return new APIResponse(false, 'No mobile user found.'); return new APIResponse(false, 'No mobile user found.');

View file

@ -9,15 +9,14 @@ use Doctrine\ORM\Query;
use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityManagerInterface;
use Catalyst\APIBundle\Controller\APIController; 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 Catalyst\APIBundle\Response\APIResponse;
use App\Ramcar\APIResult;
use App\Entity\Rider; use App\Entity\Rider;
use App\Entity\JobOrder; use App\Entity\JobOrder;
use App\Entity\RiderRating;
use App\Service\RiderTracker; use App\Service\RiderTracker;
use App\Service\MobileAPIHandler;
use App\Ramcar\JOStatus; use App\Ramcar\JOStatus;
use App\Ramcar\APIRiderStatus; use App\Ramcar\APIRiderStatus;
@ -33,25 +32,33 @@ class RiderController extends APIController
$this->acl_gen = $acl_gen; $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 = []; $required_params = [];
$res = $this->checkParamsAndKey($req, $em, $required_params); $msg = $this->checkRequiredParameters($req, $required_params);
if ($res->isError()) if ($msg)
return $res->getReturnResponse(); 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 // get customer
$cust = $this->session->getCustomer(); $cust = $mobile_user->getCustomer();
if ($cust == null) if ($cust == null)
{ return new APIResponse(false, 'No customer information found');
$res->setError(true)
->setErrorMessage('No customer information found');
return $res->getReturnResponse();
}
$ongoing_jos = $this->getOngoingJobOrders($cust, $em); $ongoing_jos = $mah->getOngoingJobOrders($cust);
$data = [];
if (count($ongoing_jos) <= 0) if (count($ongoing_jos) <= 0)
{ {
try try
@ -68,10 +75,10 @@ class RiderController extends APIController
catch (Exception $e) catch (Exception $e)
{ {
// no pending // no pending
$res->setData([ $data[] = [
'status' => APIRiderStatus::NO_PENDING_JO 'status' => APIRiderStatus::NO_PENDING_JO,
]); ];
return $res->getReturnResponse(); return new APIResponse(true, 'No pending job order', $data);
} }
// we got a recently fulfilled job order // we got a recently fulfilled job order
@ -82,7 +89,7 @@ class RiderController extends APIController
{ {
$dest = $fulfill_jo->getCoordinates(); $dest = $fulfill_jo->getCoordinates();
$data = [ $data[] = [
'jo_id' => $fulfill_jo->getID(), 'jo_id' => $fulfill_jo->getID(),
'service_type' => $fulfill_jo->getServiceType(), 'service_type' => $fulfill_jo->getServiceType(),
'destination' => [ 'destination' => [
@ -101,7 +108,9 @@ class RiderController extends APIController
if ($rider->getImageFile() != null) if ($rider->getImageFile() != null)
$image_url = $url_prefix . '/uploads/' . $rider->getImageFile(); $image_url = $url_prefix . '/uploads/' . $rider->getImageFile();
$data['status'] = APIRiderStatus::RIDER_RATING; $data[] = [
'status' => APIRiderStatus::RIDER_RATING
];
// default rider location to hub // default rider location to hub
$data['rider'] = [ $data['rider'] = [
'id' => $rider->getID(), 'id' => $rider->getID(),
@ -110,16 +119,15 @@ class RiderController extends APIController
'contact_num' => $rider->getContactNumber(), 'contact_num' => $rider->getContactNumber(),
'image_url' => $image_url, 'image_url' => $image_url,
]; ];
$res->setData($data); return new APIResponse(true, 'Rider status found', $data);
return $res->getReturnResponse();
} }
} }
// no pending // no pending
$res->setData([ $data[] = [
'status' => APIRiderStatus::NO_PENDING_JO 'status' => APIRiderStatus::NO_PENDING_JO,
]); ];
return $res->getReturnResponse(); return new APIResponse(true, 'No pending job order', $data);
} }
// get first jo that's pending // get first jo that's pending
@ -174,77 +182,70 @@ class RiderController extends APIController
'lat' => $coord->getLatitude() 'lat' => $coord->getLatitude()
] ]
]; ];
$res->setData($data);
return $res->getReturnResponse(); return new APIResponse(true, 'Rider status found', $data);
} }
$res->setData($data); return new APIResponse(true, 'Rider status found', $data);
return $res->getReturnResponse();
} }
// 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 = [ $required_params = [
'jo_id', 'jo_id',
'rating', 'rating',
]; ];
$res = $this->checkParamsAndKey($req, $em, $required_params);
if ($res->isError()) $msg = $this->checkRequiredParameters($req, $required_params);
return $res->getReturnResponse(); 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 // get customer
$cust = $this->session->getCustomer(); $cust = $mobile_user->getCustomer();
if ($cust == null) if ($cust == null)
{ return new APIResponse(false, 'No customer information found');
$res->setError(true)
->setErrorMessage('No customer information found');
return $res->getReturnResponse();
}
// get job order // get job order
$jo_id = $req->request->get('jo_id'); $jo_id = $req->request->get('jo_id');
$jo = $em->getRepository(JobOrder::class)->find($jo_id); $jo = $em->getRepository(JobOrder::class)->find($jo_id);
if ($jo == null) if ($jo == null)
{ return new APIResponse(false, 'No job order found');
$res->setError(true)
->setErrorMessage('No job order found');
return $res->getReturnResponse();
}
// get rider // get rider
$rider = $jo->getRider(); $rider = $jo->getRider();
if ($rider == null) if ($rider == null)
{ return new APIResponse(false, 'No rider found');
$res->setError(true)
->setErrorMessage('No rider found');
return $res->getReturnResponse();
}
// check that the customer owns the job order // check that the customer owns the job order
$jo_cust = $jo->getCustomer(); $jo_cust = $jo->getCustomer();
if ($jo_cust->getID() != $cust->getID()) if ($jo_cust->getID() != $cust->getID())
{ return new APIResponse(false, 'Job order was not initiated by customer;');
$res->setError(true)
->setErrorMessage('Job order was not initiated by customer');
return $res->getReturnResponse();
}
// TODO: check job order status, if it's complete // TODO: check job order status, if it's complete
// add rider rating // add rider rating
$rating_num = $req->request->get('rating', -1); $rating_num = $req->request->get('rating', -1);
$data = [];
// if rating is -1 // if rating is -1
if ($rating_num == -1) if ($rating_num == -1)
{ {
$jo->setHasRiderRating(); $jo->setHasRiderRating();
$em->flush(); $em->flush();
$res->setData([]); return new APIResponse(false, 'No rider rating', $data);
return $res->getReturnResponse();
} }
@ -267,102 +268,6 @@ class RiderController extends APIController
// TODO: set average rating in rider entity // TODO: set average rating in rider entity
$res->setData([]); return new APIResponse(true, 'Rider rating added', $data);
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;
} }
} }

View file

@ -41,7 +41,7 @@ class ServiceController extends APIController
$user_id = $this->getUser()->getID(); $user_id = $this->getUser()->getID();
// get mobile user // get mobile user
$mobile_user = $mah->findMobileUser($em, $user_id); $mobile_user = $mah->findMobileUser($user_id);
if ($mobile_user == null) if ($mobile_user == null)
return new APIResponse(false, 'No mobile user found.'); return new APIResponse(false, 'No mobile user found.');

View file

@ -42,7 +42,7 @@ class VehicleController extends APIController
$user_id = $this->getUser()->getID(); $user_id = $this->getUser()->getID();
// get mobile user // get mobile user
$mobile_user = $mah->findMobileUser($em, $user_id); $mobile_user = $mah->findMobileUser($user_id);
if ($mobile_user == null) if ($mobile_user == null)
return new APIResponse(false, 'No mobile user found.'); return new APIResponse(false, 'No mobile user found.');
@ -80,7 +80,7 @@ class VehicleController extends APIController
$user_id = $this->getUser()->getID(); $user_id = $this->getUser()->getID();
// get mobile user // get mobile user
$mobile_user = $mah->findMobileUser($em, $user_id); $mobile_user = $mah->findMobileUser($user_id);
if ($mobile_user == null) if ($mobile_user == null)
return new APIResponse(false, 'No mobile user found.'); return new APIResponse(false, 'No mobile user found.');

View file

@ -6,6 +6,9 @@ use Doctrine\ORM\EntityManagerInterface;
use App\Entity\MobileUser; use App\Entity\MobileUser;
use App\Entity\Warranty; use App\Entity\Warranty;
use App\Entity\JobOrder;
use App\Ramcar\JOStatus;
class MobileAPIHandler class MobileAPIHandler
{ {
@ -16,19 +19,19 @@ class MobileAPIHandler
$this->em = $em; $this->em = $em;
} }
public function findMobileUser($em, $user_id) public function findMobileUser($user_id)
{ {
// get capi user to link to mobile user // 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; 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. // NOTE: Modify the search for the latest warranty. This seems hacky.
// get latest warranty using plate number // 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']); ['date_create' => 'desc']);
$warr = []; $warr = [];
@ -95,5 +98,13 @@ class MobileAPIHandler
return $file_path; 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;
}
} }