X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2FController%2FPersonController.php;h=0b7a7d5c5d127e3f88c83dbaac3141c0c8da129b;hb=199445c061aac9aa77294d3861c11ca10a77a94b;hp=49c456d999609bbcb0a6f89cdf7b2eff89ea50b8;hpb=c4fba949ce8e98cadb9222a202b9e24b52dcb7f8;p=Project_proches_de_moi-server.git diff --git a/src/Controller/PersonController.php b/src/Controller/PersonController.php index 49c456d..0b7a7d5 100644 --- a/src/Controller/PersonController.php +++ b/src/Controller/PersonController.php @@ -4,11 +4,13 @@ namespace App\Controller; use App\Entity\Person; use App\Entity\Localisation; use \Datetime; +use \NotNull; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use FOS\RestBundle\Controller\FOSRestController; use FOS\RestBundle\Controller\Annotations as Rest; use FOS\RestBundle\View\ViewHandler; use FOS\RestBundle\View\View; +use FOS\RestBundle\Request\ParamFetcherInterface; use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; @@ -38,7 +40,10 @@ class PersonController extends FOSRestController $em->persist($person); $em->flush(); - return $this->view($person, Response::HTTP_CREATED, ['Location' => $this->generateUrl('show_person', ['id' => $person->getId(), UrlGeneratorInterface::ABSOLUTE_URL])]); + return $this->view($person, Response::HTTP_CREATED, + ['Location' => $this->generateUrl('show_person', + ['id' => $person->getId(), + UrlGeneratorInterface::ABSOLUTE_URL])]); } /** @@ -106,7 +111,10 @@ class PersonController extends FOSRestController $em->merge($person); $em->flush(); - return $this->view($person, Response::HTTP_CREATED, ['Location' => $this->generateUrl('show_person', ['id' => $person->getId(), UrlGeneratorInterface::ABSOLUTE_URL])]); + return $this->view($person, Response::HTTP_CREATED, + ['Location' => $this->generateUrl('show_person', + ['id' => $person->getId(), + UrlGeneratorInterface::ABSOLUTE_URL])]); } /** @@ -128,7 +136,10 @@ class PersonController extends FOSRestController if ($request->get('password') != $person->getPassword()) { return $this->PersonWrongPassword(); } else { - return $this->view($person, Response::HTTP_ACCEPTED, ['Location' => $this->generateUrl('show_person', ['id' => $person->getId(), UrlGeneratorInterface::ABSOLUTE_URL])]); + return $this->view($person, Response::HTTP_ACCEPTED, + ['Location' => $this->generateUrl('show_person', + ['id' => $person->getId(), + UrlGeneratorInterface::ABSOLUTE_URL])]); } } @@ -177,9 +188,15 @@ class PersonController extends FOSRestController } private function getLastLocalisation($em, $id) { - $query = $em->createQuery("SELECT l1 FROM App\Entity\Localisation l1 WHERE l1.person = :person and l1.timestamp = (SELECT MAX(l2.timestamp) FROM App\Entity\Localisation l2 WHERE l2.person = l1.person)"); + $query = $em->createQuery("SELECT l1 FROM App\Entity\Localisation l1 + WHERE l1.person = :person and l1.timestamp = + (SELECT MAX(l2.timestamp) FROM App\Entity\Localisation l2 + WHERE l2.person = l1.person)"); $query->setParameter('person', $id); - return $query->getResult()[0]; + $result = $query->getResult(); + if (!empty($result)) { + return $result[0]; + } } /** @@ -339,7 +356,9 @@ class PersonController extends FOSRestController return $this->PersonNotFound(); } - return $person->getFriendsWithMe(); + $friends_with_me = $person->getFriendsWithMe(); + + return $friends_with_me; } /** @@ -407,6 +426,31 @@ class PersonController extends FOSRestController $em->flush(); } + /** + * @Rest\Get( + * path = "/api/person/search", + * name = "search_person" + * ) + * @Rest\QueryParam(name="keyword") + * @Rest\View() + */ + public function searchPerson(ParamFetcherInterface $paramFetcher) + { + $em = $this->getDoctrine()->getManager(); + $query = $em->createQuery("SELECT DISTINCT p FROM App\Entity\Person p WHERE + p.firstname LIKE :keyword OR + p.lastname LIKE :keyword OR + p.email LIKE :keyword"); + $query->setParameter('keyword', '%'.$paramFetcher->get('keyword').'%'); + $persons = $query->getResult(); + + if (empty($persons)) { + return $this->PersonsNotFound(); + } + + return $persons; + } + private function PersonNotFound() { return View::create(['message' => 'Person not found'], Response::HTTP_NOT_FOUND); }