Modify PartnerController. #591
This commit is contained in:
parent
dbcf226682
commit
41f2002701
6 changed files with 96 additions and 131 deletions
|
|
@ -102,7 +102,7 @@ access_keys:
|
||||||
- id: mobile_vehicle.list
|
- id: mobile_vehicle.list
|
||||||
label: List Vehicle Makes
|
label: List Vehicle Makes
|
||||||
- id: mobile_customer_vehicle
|
- id: mobile_customer_vehicle
|
||||||
label: Mobile customer Vehicle Access
|
label: Mobile Customer Vehicle Access
|
||||||
acls:
|
acls:
|
||||||
- id: mobile_customer_vehicle.add
|
- id: mobile_customer_vehicle.add
|
||||||
label: Add Mobile Customer Vehicle
|
label: Add Mobile Customer Vehicle
|
||||||
|
|
@ -114,7 +114,7 @@ access_keys:
|
||||||
label: Mobile Promo Access
|
label: Mobile Promo Access
|
||||||
acls:
|
acls:
|
||||||
- id: mobile_promo.list
|
- id: mobile_promo.list
|
||||||
label: List Mobile Promos
|
label: List Promos
|
||||||
- id: mobile_battery
|
- id: mobile_battery
|
||||||
label: Mobile Battery Access
|
label: Mobile Battery Access
|
||||||
acls:
|
acls:
|
||||||
|
|
@ -124,4 +124,13 @@ access_keys:
|
||||||
label: Mobile Service Access
|
label: Mobile Service Access
|
||||||
acls:
|
acls:
|
||||||
- id: mobile_service.list
|
- id: mobile_service.list
|
||||||
label: List Mobile Services
|
label: List Services
|
||||||
|
- id: mobile_partner
|
||||||
|
label: Mobile Partner Access
|
||||||
|
acls:
|
||||||
|
- id: mobile_partner.list
|
||||||
|
label: List Mobile Partners
|
||||||
|
- id: mobile_partner.info
|
||||||
|
label: Get Partner Info
|
||||||
|
- id: mobile_partner.review
|
||||||
|
label: Add Partner Review
|
||||||
|
|
|
||||||
|
|
@ -105,7 +105,7 @@ resqapi_partner_info:
|
||||||
resqapi_partner:
|
resqapi_partner:
|
||||||
path: /resqapi/partners
|
path: /resqapi/partners
|
||||||
controller: App\Controller\ResqAPI\PartnerController:getClosestPartners
|
controller: App\Controller\ResqAPI\PartnerController:getClosestPartners
|
||||||
methods: [GET]
|
methods: [POST]
|
||||||
|
|
||||||
resqapi_partner_review:
|
resqapi_partner_review:
|
||||||
path: /resqapi/partners/{pid}/review
|
path: /resqapi/partners/{pid}/review
|
||||||
|
|
|
||||||
|
|
@ -401,7 +401,7 @@ class CustomerController extends APIController
|
||||||
|
|
||||||
$api_version = $this->getParameter('api_version');
|
$api_version = $this->getParameter('api_version');
|
||||||
|
|
||||||
$app_version = $req->query->get('version');
|
$app_version = $req->request->get('version');
|
||||||
|
|
||||||
$api_v = explode('.', $api_version);
|
$api_v = explode('.', $api_version);
|
||||||
$app_v = explode('.', $app_version);
|
$app_v = explode('.', $app_version);
|
||||||
|
|
|
||||||
|
|
@ -9,14 +9,13 @@ 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\Partner;
|
use App\Entity\Partner;
|
||||||
use App\Entity\Review;
|
use App\Entity\Review;
|
||||||
|
|
||||||
|
use App\Service\MobileAPIHandler;
|
||||||
|
|
||||||
use Catalyst\APIBundle\Access\Generator as ACLGenerator;
|
use Catalyst\APIBundle\Access\Generator as ACLGenerator;
|
||||||
|
|
||||||
class PartnerController extends APIController
|
class PartnerController extends APIController
|
||||||
|
|
@ -28,22 +27,35 @@ class PartnerController extends APIController
|
||||||
$this->acl_gen = $acl_gen;
|
$this->acl_gen = $acl_gen;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getClosestPartners(Request $req, EntityManagerInterface $em)
|
public function getClosestPartners(Request $req, EntityManagerInterface $em,
|
||||||
|
MobileAPIHandler $mah)
|
||||||
{
|
{
|
||||||
|
$this->denyAccessUnlessGranted('mobile_partner.list', null, 'No access.');
|
||||||
|
|
||||||
|
// check required parameters
|
||||||
$required_params = [
|
$required_params = [
|
||||||
'longitude',
|
'longitude',
|
||||||
'latitude',
|
'latitude',
|
||||||
'service_id',
|
'service_id',
|
||||||
'limit',
|
'limit',
|
||||||
];
|
];
|
||||||
$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);
|
||||||
|
|
||||||
$long = $req->query->get('longitude');
|
// get capi user to link to mobile user
|
||||||
$lat = $req->query->get('latitude');
|
$user_id = $this->getUser()->getID();
|
||||||
$service_id = $req->query->get('service_id');
|
|
||||||
$limit = $req->query->get('limit');
|
// get mobile user
|
||||||
|
$mobile_user = $mah->findMobileUser($em, $user_id);
|
||||||
|
|
||||||
|
if ($mobile_user == null)
|
||||||
|
return new APIResponse(false, 'No mobile user found.');
|
||||||
|
|
||||||
|
$long = $req->request->get('longitude');
|
||||||
|
$lat = $req->request->get('latitude');
|
||||||
|
$service_id = $req->request->get('service_id');
|
||||||
|
$limit = $req->request->get('limit');
|
||||||
|
|
||||||
// get partners within range
|
// get partners within range
|
||||||
$query = $em->createQuery('SELECT p, st_distance(p.coordinates, point(:lng, :lat)) as dist FROM App\Entity\Partner p
|
$query = $em->createQuery('SELECT p, st_distance(p.coordinates, point(:lng, :lat)) as dist FROM App\Entity\Partner p
|
||||||
|
|
@ -55,10 +67,10 @@ class PartnerController extends APIController
|
||||||
$query->setMaxResults($limit);
|
$query->setMaxResults($limit);
|
||||||
$result = $query->getResult();
|
$result = $query->getResult();
|
||||||
|
|
||||||
$data = [];
|
|
||||||
$partners = [];
|
$partners = [];
|
||||||
foreach($result as $row)
|
foreach($result as $row)
|
||||||
{
|
{
|
||||||
|
error_log($row[0]->getID());
|
||||||
$partners[] = [
|
$partners[] = [
|
||||||
'id' => $row[0]->getID(),
|
'id' => $row[0]->getID(),
|
||||||
'name' => $row[0]->getName(),
|
'name' => $row[0]->getName(),
|
||||||
|
|
@ -75,26 +87,33 @@ class PartnerController extends APIController
|
||||||
|
|
||||||
$data['partners'] = $partners;
|
$data['partners'] = $partners;
|
||||||
|
|
||||||
$res->setData($data);
|
return new APIResponse(true, 'Partners found', $data);
|
||||||
|
|
||||||
return $res->getReturnResponse();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getPartnerInformation(Request $req, $pid, EntityManagerInterface $em)
|
public function getPartnerInformation(Request $req, $pid, EntityManagerInterface $em,
|
||||||
|
MobileAPIHandler $mah)
|
||||||
{
|
{
|
||||||
|
$this->denyAccessUnlessGranted('mobile_partner.info', null, 'No access.');
|
||||||
|
|
||||||
|
// check required parameters
|
||||||
$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($em, $user_id);
|
||||||
|
|
||||||
|
if ($mobile_user == null)
|
||||||
|
return new APIResponse(false, 'No mobile user found.');
|
||||||
|
|
||||||
// get partner
|
// get partner
|
||||||
$partner = $em->getRepository(Partner::class)->findOneBy(['id' => $pid]);
|
$partner = $em->getRepository(Partner::class)->findOneBy(['id' => $pid]);
|
||||||
if ($partner == null)
|
if ($partner == null)
|
||||||
{
|
return new APIResponse(false, 'No partner found.');
|
||||||
$res->setError(true)
|
|
||||||
->setErrorMessage('No partner found.');
|
|
||||||
return $res->getReturnResponse();
|
|
||||||
}
|
|
||||||
|
|
||||||
// get reviews for partner
|
// get reviews for partner
|
||||||
$reviews = $em->getRepository(Review::class)->findBy(['partner' => $partner]);
|
$reviews = $em->getRepository(Review::class)->findBy(['partner' => $partner]);
|
||||||
|
|
@ -125,21 +144,31 @@ class PartnerController extends APIController
|
||||||
'average_rating' => $average_rating,
|
'average_rating' => $average_rating,
|
||||||
];
|
];
|
||||||
|
|
||||||
$res->setData($data);
|
return new APIResponse(true, 'Partner information found', $data);
|
||||||
|
|
||||||
return $res->getReturnResponse();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function reviewPartner($pid, Request $req, EntityManagerInterface $em)
|
public function reviewPartner($pid, Request $req, EntityManagerInterface $em,
|
||||||
|
MobileAPIHandler $mah)
|
||||||
{
|
{
|
||||||
|
$this->denyAccessUnlessGranted('mobile_partner.review', null, 'No access.');
|
||||||
|
|
||||||
$required_params = [
|
$required_params = [
|
||||||
'rating',
|
'rating',
|
||||||
'message',
|
'message',
|
||||||
];
|
];
|
||||||
|
|
||||||
$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($em, $user_id);
|
||||||
|
|
||||||
|
if ($mobile_user == null)
|
||||||
|
return new APIResponse(false, 'No mobile user found.');
|
||||||
|
|
||||||
$rating = $req->request->get('rating');
|
$rating = $req->request->get('rating');
|
||||||
$msg = $req->request->get('message');
|
$msg = $req->request->get('message');
|
||||||
|
|
@ -149,11 +178,7 @@ class PartnerController extends APIController
|
||||||
// check if partner exists
|
// check if partner exists
|
||||||
$partner = $em->getRepository(Partner::class)->find($pid);
|
$partner = $em->getRepository(Partner::class)->find($pid);
|
||||||
if ($partner == null)
|
if ($partner == null)
|
||||||
{
|
return new APIResponse(false, 'No partner found.');
|
||||||
$res->setError(true)
|
|
||||||
->setErrorMessage('No partner found.');
|
|
||||||
return $res->getReturnResponse();
|
|
||||||
}
|
|
||||||
|
|
||||||
$rev = new Review();
|
$rev = new Review();
|
||||||
$rev->setRating($rating)
|
$rev->setRating($rating)
|
||||||
|
|
@ -165,93 +190,6 @@ class PartnerController extends APIController
|
||||||
$em->persist($rev);
|
$em->persist($rev);
|
||||||
$em->flush();
|
$em->flush();
|
||||||
|
|
||||||
$data = [];
|
return new APIResponse(true, 'Review added');
|
||||||
$res->setData($data);
|
|
||||||
|
|
||||||
return $res->getReturnResponse();
|
|
||||||
}
|
|
||||||
|
|
||||||
// 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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -97,9 +97,9 @@ class MobileUser
|
||||||
*/
|
*/
|
||||||
protected $date_code_sent;
|
protected $date_code_sent;
|
||||||
|
|
||||||
// reviews made by mobile session
|
// reviews made by mobile user
|
||||||
/**
|
/**
|
||||||
* @ORM\OneToMany(targetEntity="Review", mappedBy="mobile_session")
|
* @ORM\OneToMany(targetEntity="Review", mappedBy="mobile_user")
|
||||||
*/
|
*/
|
||||||
protected $reviews;
|
protected $reviews;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -52,6 +52,13 @@ class Review
|
||||||
*/
|
*/
|
||||||
protected $mobile_session;
|
protected $mobile_session;
|
||||||
|
|
||||||
|
// mobile user that sent review
|
||||||
|
/**
|
||||||
|
* @ORM\ManyToOne(targetEntity="MobileUser", inversedBy="reviews")
|
||||||
|
* @ORM\JoinColumn(name="mobile_user_id", referencedColumnName="id")
|
||||||
|
*/
|
||||||
|
protected $mobile_user;
|
||||||
|
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
$this->date_create = new DateTime();
|
$this->date_create = new DateTime();
|
||||||
|
|
@ -114,4 +121,15 @@ class Review
|
||||||
return $this->mobile_session;
|
return $this->mobile_session;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function setMobileUser(MobileUser $mobile_user)
|
||||||
|
{
|
||||||
|
$this->mobile_user = $mobile_user;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getMobileUser()
|
||||||
|
{
|
||||||
|
return $this->mobile_user;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue