From f0640a5242b2a959068696eed3d41c37d07633a7 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Benoit?= Date: Thu, 28 Jun 2018 15:45:00 +0200 Subject: [PATCH] Fix the user creation ressource. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jérôme Benoit --- config/packages/fos_rest.yaml | 2 + config/packages/framework.yaml | 1 + src/Controller/PersonController.php | 176 +++++++++++++++------------- tests/curl.txt | 14 +++ 4 files changed, 109 insertions(+), 84 deletions(-) diff --git a/config/packages/fos_rest.yaml b/config/packages/fos_rest.yaml index f421b48..7e7f74d 100644 --- a/config/packages/fos_rest.yaml +++ b/config/packages/fos_rest.yaml @@ -24,6 +24,8 @@ fos_rest: - { path: '^/api', priorities: ['json'], fallback_format: 'json' } body_listener: enabled: true + body_converter: + enabled: true versioning: enabled: true resolvers: diff --git a/config/packages/framework.yaml b/config/packages/framework.yaml index 4f592f9..fb3f0e1 100644 --- a/config/packages/framework.yaml +++ b/config/packages/framework.yaml @@ -34,3 +34,4 @@ framework: sensio_framework_extra: view: { annotations: true } + request: { converters: true } diff --git a/src/Controller/PersonController.php b/src/Controller/PersonController.php index 734f29c..bc34bcd 100644 --- a/src/Controller/PersonController.php +++ b/src/Controller/PersonController.php @@ -3,6 +3,7 @@ namespace App\Controller; use App\Entity\Person; 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; @@ -11,18 +12,23 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Generator\UrlGeneratorInterface; -class PersonController extends Controller +class PersonController extends FOSRestController { /** * @Rest\Post( - * path = "/api/person/inscription", + * path = "/api/person/register", * name = "create_person" * ) * @Rest\View(StatusCode = Response::HTTP_CREATED) - * @ParamConverter("person", converter="fos_rest.request_body") */ - public function createPersonAction(Person $person) - { + public function createPersonAction(Request $request) + { $person = new Person(); + $person->setFirstname($request->get('firstname')); + $person->setLastName($request->get('lastname')); + $person->setEmail($request->get('email')); + $person->setPassword($request->get('password')); + $person->setOnline(false); + $em = $this->getDoctrine()->getManager(); $em->persist($person); @@ -79,6 +85,7 @@ class PersonController extends Controller */ public function getLocalisationsAction(Request $request) { + //TODO: Check that the authenticated user is allowed to see the localisation $em = $this->getDoctrine()->getManager(); $localisations = $em->getRepository('App:Localisation')->findBy(['person' => $request->get('id')]); @@ -95,14 +102,15 @@ class PersonController extends Controller */ public function getLocalisationAction(Request $request) { + //TODO: Check that the authenticated user is allowed to see the localisation $em = $this->getDoctrine()->getManager(); - $localisations = $em->getRepository('App:Localisation')->findOneBy(['person' => $request->get('id')]); + $localisation = $em->getRepository('App:Localisation')->findOneBy(['person' => $request->get('id')]); - if (empty($localisations)) { + if (empty($localisation)) { return $this->PersonLocalisationNotFound(); } - return $localisations; + return $localisation; } /** @@ -124,15 +132,15 @@ class PersonController extends Controller } /** - * @Rest\Get( - * path = "/api/person/{id}", - * name = "show_person", - * requirements = {"id"="\d+"} - * ) - * @Rest\View() - */ - public function showPerson(Request $request) - { + * @Rest\Get( + * path = "/api/person/{id}", + * name = "show_person", + * requirements = {"id"="\d+"} + * ) + * @Rest\View() + */ + public function showPerson(Request $request) + { $em = $this->getDoctrine()->getManager(); $person = $em->getRepository('App:Person')->find($request->get('id')); @@ -141,18 +149,18 @@ class PersonController extends Controller } return $person; - } - - /** - * @Rest\Get( - * path = "/api/person/{email}", - * name = "show_person_by_email", - * requirements = {"email"="\s+"} - * ) - * @Rest\View() - */ - public function showPersonByEmail(Request $request) - { + } + + /** + * @Rest\Get( + * path = "/api/person/{email}", + * name = "show_person_by_email", + * requirements = {"email"="\s+"} + * ) + * @Rest\View() + */ + public function showPersonByEmail(Request $request) + { $em = $this->getDoctrine()->getManager(); $person = $em->getRepository('App:Person')->findOneBy(['email' => $request->get('email')]); @@ -161,18 +169,18 @@ class PersonController extends Controller } return $person; - } - - /** - * @Rest\Get( - * path = "/api/person/{id}/friends", - * name = "show_person_friends", - * requirements = {"id"="\d+"} - * ) - * @Rest\View() - */ - public function showPersonFriends(Request $request) - { + } + + /** + * @Rest\Get( + * path = "/api/person/{id}/friends", + * name = "show_person_friends", + * requirements = {"id"="\d+"} + * ) + * @Rest\View() + */ + public function showPersonFriends(Request $request) + { $em = $this->getDoctrine()->getManager(); $person = $em->getRepository('App:Person')->find($request->get('id')); @@ -181,37 +189,37 @@ class PersonController extends Controller } return $person->getFriends(); - } - - /** - * @Rest\Get( - * path = "/api/persons", - * name = "show_persons" - * ) - * @Rest\View() - */ - public function showPersons(Request $request) - { - $em = $this->getDoctrine()->getManager(); - $persons = $em->getRepository('App:Person')->findAll(); - - if (empty($persons)) { + } + + /** + * @Rest\Get( + * path = "/api/persons", + * name = "show_persons" + * ) + * @Rest\View() + */ + public function showPersons(Request $request) + { + $em = $this->getDoctrine()->getManager(); + $persons = $em->getRepository('App:Person')->findAll(); + + if (empty($persons)) { return $this->PersonsNotFound(); - } - - return $persons; - } - - /** - * @Rest\Get( - * path = "/api/person/{email}/friends", - * name = "show_person_friends_by_email", - * requirements = {"email"="\s+"} - * ) - * @Rest\View() - */ - public function showPersonFriendsByEmail(Request $request) - { + } + + return $persons; + } + + /** + * @Rest\Get( + * path = "/api/person/{email}/friends", + * name = "show_person_friends_by_email", + * requirements = {"email"="\s+"} + * ) + * @Rest\View() + */ + public function showPersonFriendsByEmail(Request $request) + { $em = $this->getDoctrine()->getManager(); $person = $em->getRepository('App:Person')->findOneBy(['email' => $request->get('email')]); @@ -220,22 +228,22 @@ class PersonController extends Controller } return $person->getFriends(); - } + } - private function PersonNotFound() { - return View::create(['message' => 'Person not found'], Response::HTTP_NOT_FOUND); - } + private function PersonNotFound() { + return View::create(['message' => 'Person not found'], Response::HTTP_NOT_FOUND); + } - private function PersonsNotFound() { - return View::create(['message' => 'Persons not found'], Response::HTTP_NOT_FOUND); - } + private function PersonsNotFound() { + return View::create(['message' => 'Persons not found'], Response::HTTP_NOT_FOUND); + } - private function PersonLocalisationNotFound() { - return View::create(['message' => 'Person localisation not found'], Response::HTTP_NOT_FOUND); - } + private function PersonLocalisationNotFound() { + return View::create(['message' => 'Person localisation not found'], Response::HTTP_NOT_FOUND); + } - private function PersonLocalisationsNotFound() { - return View::create(['message' => 'Person localisations not found'], Response::HTTP_NOT_FOUND); - } + private function PersonLocalisationsNotFound() { + return View::create(['message' => 'Person localisations not found'], Response::HTTP_NOT_FOUND); + } } diff --git a/tests/curl.txt b/tests/curl.txt index e69de29..8202612 100644 --- a/tests/curl.txt +++ b/tests/curl.txt @@ -0,0 +1,14 @@ +* Create a user : +curl --request POST --data "{ \"firstname\": \"James\", \"lastname\": \"Elbow\", \"email\": \"james@elbow.com\", \"password\": \"FD3CC7719AB1776B81D70B65170D8A51119E127488C106622E0D2E680C1B3FFF\"}" http://localhost:8000/api/person/register --header "Content-Type: application/json" + +* Show a user with id 1: +curl --request GET http://localhost:8000/api/person/1 + +* Show a user with id 1 friends : +curl --request GET http://localhost:8000/api/person/1/friends + +* Show a user with id 1 localisation : +curl --request GET http://localhost:8000/api/person/1/localisation + +* Show a user with id 1 localisations : +curl --request GET http://localhost:8000/api/person/1/localisations -- 2.34.1