Fix the REST ressource for getting the latest localisation of a user.
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Thu, 28 Jun 2018 19:44:53 +0000 (21:44 +0200)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Thu, 28 Jun 2018 19:44:53 +0000 (21:44 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
config/packages/fos_rest.yaml
src/Controller/PersonController.php
tests/curl.txt

index 7e7f74de329cbcca0e5f7196b303a17a6cb9ede0..18a74b1fe61d7361d285a24607bd94ce13bf968d 100644 (file)
@@ -32,3 +32,5 @@ fos_rest:
             media_type: # Accept header
                 enabled: true
                 regex: '/(v|version)=(?P<version>[0-9\.]+)/'
+    serializer:
+        serialize_null: true
index 0430370f17f0b4380d0c03ed62fdffdf97e23be3..b037f5367faffa87ec7f2435f808f241526231eb 100644 (file)
@@ -132,7 +132,10 @@ class PersonController extends FOSRestController
     {
         //TODO: Check that the authenticated user is allowed to see the localisation
         $em = $this->getDoctrine()->getManager();
-        $localisation = $em->getRepository('App:Localisation')->findOneBy(['person' => $request->get('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->setParameter('person', $request->get('id'));
+        $localisation = $query->getResult();
 
         if (empty($localisation)) {
             return $this->PersonLocalisationNotFound();
index 3798713872e33883cc4ba0bcd3ae7b3decd9bccb..6f2d0ac1eff5fe8b5931e21c3c305bc3df0cc917 100644 (file)
@@ -1,14 +1,14 @@
 * Create a user:
-curl --request POST http://localhost:8000/api/person/register --data "{ \"firstname\": \"James\", \"lastname\": \"Elbow\", \"email\": \"james@elbow.com\", \"password\": \"FD3CC7719AB1776B81D70B65170D8A51119E127488C106622E0D2E680C1B3FFF\"}" --header "Content-Type: application/json"
+curl --request POST http://localhost:8000/api/person/register --data "{ \"firstname\": \"James\", \"lastname\": \"Elbow\", \"email\": \"james@elbow.com\", \"password\": \"FD3CC7719AB1776B81D70B65170D8A51119E127488C106622E0D2E680C1B3FFF\" }" --header "Content-Type: application/json"
 
 * Delete a user with id 1:
 curl --request DELETE http://localhost:8000/api/person/1
 
 * Update a user with id 1:
-curl --request PUT http://localhost:8000/api/person/1 --data "{ \"firstname\": \"Jamesson\", \"lastname\": \"Elbow\", \"email\": \"james@elbow.com\"}" --header "Content-Type: application/json"
+curl --request PUT http://localhost:8000/api/person/1 --data "{ \"firstname\": \"Jamesson\", \"lastname\": \"Elbow\", \"email\": \"james@elbow.com\" }" --header "Content-Type: application/json"
 
 * Update/add a user with id 1 localisation:
-curl --request POST http://localhost:8000/api/person/1/localisation --data "{ \"timestamp\": \"$(date --iso-8601=seconds)\", \"latitude\": \"43.23\", \"longitude\": \"5.43\"}" --header "Content-Type: application/json"
+curl --request POST http://localhost:8000/api/person/1/localisation --data "{ \"timestamp\": \"$(date --iso-8601=seconds)\", \"latitude\": \"43.23\", \"longitude\": \"5.43\" }" --header "Content-Type: application/json"
 
 * Update a user online status:
 curl --request PUT http://localhost:8000/api/person/1/online