X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2FController%2FPersonController.php;h=9ef74692683fd17976ef9ed4619943d28ae63e6a;hb=3d47ccc80097bec1a6890e103357d7c7cf0cff87;hp=af3c28a95e4ced170dac009a82e1826aa81fc01e;hpb=98f8520783f01754efaddb692cddb77e9fc236f3;p=Project_proches_de_moi-server.git diff --git a/src/Controller/PersonController.php b/src/Controller/PersonController.php index af3c28a..9ef7469 100644 --- a/src/Controller/PersonController.php +++ b/src/Controller/PersonController.php @@ -2,8 +2,13 @@ namespace App\Controller; use App\Entity\Person; +use App\Entity\Localisation; +use \Datetime; +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 Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; @@ -13,14 +18,20 @@ 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); @@ -35,30 +46,55 @@ class PersonController extends FOSRestController */ public function removePersonAction(Request $request) { + //TODO: check that the authenticated user have the same id $em = $this->getDoctrine()->getManager(); - $person = $em->getRepository('App::Person')->find($request->get('id')); + $person = $em->getRepository('App:Person')->find($request->get('id')); + $friends = $em->getRepository('App:Friendship')->findBy(['person' => $request->get('id')]); + $friends_with_me = $em->getRepository('App:Friendship')->findBy(['friend' => $request->get('id')]); + $localisations = $em->getRepository('App:Localisation')->findBy(['person' => $request->get('id')]); + + if (!empty($localisations)) { + foreach ($localisations as $localisation) { + $em->remove($localisation); + } + $em->flush(); + } - if (!empty($person)) { - $em->remove($person); + if (!empty($friends)) { + foreach ($friends as $friend) { + $em->remove($friend); + } + $em->flush(); + } + + if (!empty($friends_with_me)) { + foreach ($friends_with_me as $friend) { + $em->remove($friend); + } $em->flush(); } - //TODO: remove localisation and friendship + + if (!empty($person)) { + $em->remove($person); + $em->flush(); + } } /** * @Rest\Put( - * path = "/api/person/{id}/update", + * path = "/api/person/{id}", * name = "update_person" * ) * @Rest\View(StatusCode = Response::HTTP_CREATED) */ public function updatePersonAction(Request $request) { + //TODO: check that the authenticated user have the same id $em = $this->getDoctrine()->getManager(); - $person = $em->getRepository('App::Person')->find($request->get('id')); + $person = $em->getRepository('App:Person')->find($request->get('id')); if (empty($person)) { - return new JsonResponse(['message' => 'Person not found'], Response::HTTP_NOT_FOUND); + return $this->PersonNotFound(); } $person->setFirstName($request->get('firstname')); @@ -72,11 +108,37 @@ class PersonController extends FOSRestController } /** - * @Rest\Get("/api/person/{id}/friends/localisation") + * @Rest\Get("/api/person/{id}/localisations") + * @Rest\View() */ - public function getFriendsLocalisationAction(Request $request) + 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')]); + if (empty($localisations)) { + return $this->PersonLocalisationsNotFound(); + } + + return $localisations; + } + + /** + * @Rest\Get("/api/person/{id}/localisation") + * @Rest\View() + */ + public function getLocalisationAction(Request $request) + { + //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')]); + + if (empty($localisation)) { + return $this->PersonLocalisationNotFound(); + } + + return $localisation; } /** @@ -85,95 +147,100 @@ class PersonController extends FOSRestController */ public function updateLocalisationAction(Request $request) { + //TODO: Check that the authenticated user is allowed to update the localisation + $em = $this->getDoctrine()->getManager(); + + $person = $em->getRepository('App:Person')->find($request->get('id')); + + if (empty($person)) { + return $this->PersonNotFound(); + } + + $datetime = new DateTime($request->get('timestamp')); + $localisation = new Localisation(); - $localisation->setPerson($request->get('id')); - $localisation->setTimestamp($request->get('timestamp')); + $localisation->setPerson($person); + $localisation->setTimestamp($datetime); $localisation->setLatitude($request->get('latitude')); $localisation->setLongitude($request->get('longitude')); - $em = $this->getDoctrine()->getManager(); - $em->persist($localisation); $em->flush(); } /** - * @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')); - - if (empty($person)) { - return new JsonResponse(['message' => 'Person not found'], Response::HTTP_NOT_FOUND); + * @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')); + + if (empty($person)) { + return $this->PersonNotFound(); + } + + return $person; + } + + /** + * @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')); + + if (empty($person)) { + return $this->PersonNotFound(); } - return $person; - } - - /** - * @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')->find($request->get('email')); - - if (empty($person)) { - return new JsonResponse(['message' => 'Person not found'], Response::HTTP_NOT_FOUND); - } - - return $person; - } - - /** - * @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')); - - if (empty($person)) { - return new JsonResponse(['message' => 'Person not found'], Response::HTTP_NOT_FOUND); - } - - return $person->getFriends(); - } - - /** - * @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')->find($request->get('email')); - - if (empty($person)) { - return new JsonResponse(['message' => 'Person not found'], Response::HTTP_NOT_FOUND); - } - - return $person->getFriends(); - } + 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)) { + return $this->PersonsNotFound(); + } + + return $persons; + } + + 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 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); + } + }