Refine the search REST ressource.
[Project_proches_de_moi-server.git] / src / Controller / PersonController.php
index 6b4120545ec9196498d354910457e2de92407f97..0b7a7d5c5d127e3f88c83dbaac3141c0c8da129b 100644 (file)
@@ -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,7 +188,10 @@ 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);
         $result = $query->getResult();
         if (!empty($result)) {
@@ -413,24 +427,25 @@ class PersonController extends FOSRestController
     }
 
     /**
-     * @Rest\Post(
+     * @Rest\Get(
      *     path = "/api/person/search",
      *     name = "search_person"
      * )
+     * @Rest\QueryParam(name="keyword")
      * @Rest\View()
      */
-    public function searchPerson(Request $request)
+    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.firstname LIKE :keyword OR
+            p.lastname LIKE :keyword OR
             p.email LIKE :keyword");
-        $query->setParameter('keyword', '%'.$request->get('keyword').'%');
+        $query->setParameter('keyword', '%'.$paramFetcher->get('keyword').'%');
         $persons = $query->getResult();
 
         if (empty($persons)) {
-            return $this->PersonNotFound();
+            return $this->PersonsNotFound();
         }
 
         return $persons;