Add getClosestPartners method to the APIController that takes in a longitude, latitude, results limit, and service id to find the closes partners. #228
This commit is contained in:
parent
5c70cad362
commit
e8b76e8810
2 changed files with 64 additions and 4 deletions
|
|
@ -134,3 +134,9 @@ api_partner_info:
|
|||
path: /api/partner/{pid}
|
||||
controller: App\Controller\APIController:getPartnerInformation
|
||||
methods: [GET]
|
||||
|
||||
api_partner:
|
||||
path: /api/partners
|
||||
controller: App\Controller\APIController:getClosestPartners
|
||||
methods: [GET]
|
||||
|
||||
|
|
|
|||
|
|
@ -1837,8 +1837,8 @@ class APIController extends Controller
|
|||
'branch' => $sp->getBranch(),
|
||||
'address' => $sp->getAddress(),
|
||||
'contact_nums' => $sp->getContactNumbers(),
|
||||
'time_open' => $sp->getTimeOpen()->format("d M Y g:i A"),
|
||||
'time_close' => $sp->getTimeClose()->format("d M Y g:i A"),
|
||||
'time_open' => $sp->getTimeOpen()->format("g:i A"),
|
||||
'time_close' => $sp->getTimeClose()->format("g:i A"),
|
||||
];
|
||||
}
|
||||
|
||||
|
|
@ -1896,8 +1896,8 @@ class APIController extends Controller
|
|||
'branch' => $partner->getBranch(),
|
||||
'address' => $partner->getAddress(),
|
||||
'contact_nums' => $partner->getContactNumbers(),
|
||||
'time_open' => $partner->getTimeOpen()->format("d M Y g:i A"),
|
||||
'time_close' => $partner->getTimeClose()->format("d M Y g:i A"),
|
||||
'time_open' => $partner->getTimeOpen()->format("g:i A"),
|
||||
'time_close' => $partner->getTimeClose()->format("g:i A"),
|
||||
'reviews' => $rev,
|
||||
];
|
||||
|
||||
|
|
@ -1905,4 +1905,58 @@ class APIController extends Controller
|
|||
|
||||
return $res->getReturnResponse();
|
||||
}
|
||||
|
||||
public function getClosestPartners(Request $req)
|
||||
{
|
||||
$required_params = [
|
||||
'longitude',
|
||||
'latitude',
|
||||
'service_id',
|
||||
'limit',
|
||||
];
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$res = $this->checkParamsAndKey($req, $em, $required_params);
|
||||
if ($res->isError())
|
||||
return $res->getReturnResponse();
|
||||
|
||||
$long = $req->query->get('longitude');
|
||||
$lat = $req->query->get('latitude');
|
||||
$service_id = $req->query->get('service_id');
|
||||
$limit = $req->query->get('limit');
|
||||
|
||||
// get partners within range
|
||||
$query = $em->createQuery('SELECT p, st_distance(p.coordinates, point(:lng, :lat)) as dist FROM App\Entity\Partner p
|
||||
JOIN App\Entity\Service s where s.id = :service_id ORDER BY dist')
|
||||
->setParameter('lat', $lat)
|
||||
->setParameter('lng', $long)
|
||||
->setParameter('service_id', $service_id);
|
||||
|
||||
$query->setMaxResults($limit);
|
||||
$result = $query->getResult();
|
||||
|
||||
$data = [];
|
||||
foreach($result as $row)
|
||||
{
|
||||
$partner = [];
|
||||
$partner[] = [
|
||||
'id' => $row[0]->getID(),
|
||||
'name' => $row[0]->getName(),
|
||||
'branch' => $row[0]->getBranch(),
|
||||
'address' => $row[0]->getAddress(),
|
||||
'contact_nums' => $row[0]->getContactNumbers(),
|
||||
'time_open' => $row[0]->getTimeOpen()->format("g:i A"),
|
||||
'time_close' => $row[0]->getTimeClose()->format("g:i A"),
|
||||
];
|
||||
|
||||
$data[] = [
|
||||
'partner' => $partner,
|
||||
'db_distance' => $row['dist'],
|
||||
];
|
||||
}
|
||||
|
||||
$res->setData($data);
|
||||
|
||||
return $res->getReturnResponse();
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue