Use default controller class.
[Project_proches_de_moi-server.git] / src / Controller / PersonController.php
1 <?php
2 namespace App\Controller;
3
4 use App\Entity\Person;
5 use Symfony\Bundle\FrameworkBundle\Controller\Controller;
6 #use FOS\RestBundle\Controller\FOSRestController;
7 use FOS\RestBundle\Controller\Annotations as Rest;
8 use FOS\RestBundle\View\ViewHandler;
9 use FOS\RestBundle\View\View;
10 use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
11 use Symfony\Component\HttpFoundation\Request;
12 use Symfony\Component\HttpFoundation\Response;
13 use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
14
15 class PersonController extends Controller
16 {
17 /**
18 * @Rest\Post(
19 * path = "/api/person/inscription",
20 * name = "create_person"
21 * )
22 * @Rest\View(StatusCode = Response::HTTP_CREATED)
23 * @ParamConverter("person", converter="fos_rest.request_body")
24 */
25 public function createPersonAction(Person $person)
26 {
27 $em = $this->getDoctrine()->getManager();
28
29 $em->persist($person);
30 $em->flush();
31
32 return $this->view($person, Response::HTTP_CREATED, ['Location' => $this->generateUrl('show_person', ['id' => $person->getId(), UrlGeneratorInterface::ABSOLUTE_URL])]);
33 }
34
35 /**
36 * @Rest\Delete("/api/person/{id}")
37 * @Rest\View(statusCode = Response::HTTP_NO_CONTENT)
38 */
39 public function removePersonAction(Request $request)
40 {
41 $em = $this->getDoctrine()->getManager();
42 $person = $em->getRepository('App:Person')->find($request->get('id'));
43
44 if (!empty($person)) {
45 $em->remove($person);
46 $em->flush();
47 }
48 //TODO: remove localisation and friendship
49 }
50
51 /**
52 * @Rest\Put(
53 * path = "/api/person/{id}/update",
54 * name = "update_person"
55 * )
56 * @Rest\View(StatusCode = Response::HTTP_CREATED)
57 */
58 public function updatePersonAction(Request $request)
59 {
60 $em = $this->getDoctrine()->getManager();
61 $person = $em->getRepository('App:Person')->find($request->get('id'));
62
63 if (empty($person)) {
64 return new JsonResponse(['message' => 'Person not found'], Response::HTTP_NOT_FOUND);
65 }
66
67 $person->setFirstName($request->get('firstname'));
68 $person->setLastName($request->get('lastname'));
69 $person->setEmail($request->get('email'));
70
71 $em->merge($person);
72 $em->flush();
73
74 return $this->view($person, Response::HTTP_CREATED, ['Location' => $this->generateUrl('show_person', ['id' => $person->getId(), UrlGeneratorInterface::ABSOLUTE_URL])]);
75 }
76
77 /**
78 * @Rest\Get("/api/person/{id}/friends/localisation")
79 */
80 public function getFriendsLocalisationAction(Request $request)
81 {
82
83 }
84
85 /**
86 * @Rest\Post("/api/person/{id}/localisation")
87 * @Rest\View(StatusCode = Response::HTTP_CREATED)
88 */
89 public function updateLocalisationAction(Request $request)
90 {
91 $localisation = new Localisation();
92 $localisation->setPerson($request->get('id'));
93 $localisation->setTimestamp($request->get('timestamp'));
94 $localisation->setLatitude($request->get('latitude'));
95 $localisation->setLongitude($request->get('longitude'));
96
97 $em = $this->getDoctrine()->getManager();
98
99 $em->persist($localisation);
100 $em->flush();
101 }
102
103 /**
104 * @Rest\Get(
105 * path = "/api/person/{id}",
106 * name = "show_person",
107 * requirements = {"id"="\d+"}
108 * )
109 * @Rest\View()
110 */
111 public function showPerson(Request $request)
112 {
113 $em = $this->getDoctrine()->getManager();
114 $person = $em->getRepository('App:Person')->find($request->get('id'));
115
116 if (empty($person)) {
117 return new JsonResponse(['message' => 'Person not found'], Response::HTTP_NOT_FOUND);
118 }
119
120 $view = View::create($person);
121 $view->setFormat('json');
122
123 return $view;
124 }
125
126 /**
127 * @Rest\Get(
128 * path = "/api/person/{email}",
129 * name = "show_person_by_email",
130 * requirements = {"email"="\s+"}
131 * )
132 * @Rest\View()
133 */
134 public function showPersonByEmail(Request $request)
135 {
136 $em = $this->getDoctrine()->getManager();
137 $person = $em->getRepository('App:Person')->find($request->get('email'));
138
139 if (empty($person)) {
140 return new JsonResponse(['message' => 'Person not found'], Response::HTTP_NOT_FOUND);
141 }
142
143 $view = View::create($person);
144 $view->setFormat('json');
145
146 return $view;
147 }
148
149 /**
150 * @Rest\Get(
151 * path = "/api/person/{id}/friends",
152 * name = "show_person_friends",
153 * requirements = {"id"="\d+"}
154 * )
155 * @Rest\View()
156 */
157 public function showPersonFriends(Request $request)
158 {
159 $em = $this->getDoctrine()->getManager();
160 $person = $em->getRepository('App:Person')->find($request->get('id'));
161
162 if (empty($person)) {
163 return new JsonResponse(['message' => 'Person not found'], Response::HTTP_NOT_FOUND);
164 }
165
166 $view = View::create($person->getFriends());
167 $view->setFormat('json');
168
169 return $view;
170 }
171
172 /**
173 * @Rest\Get(
174 * path = "/api/person/{email}/friends",
175 * name = "show_person_friends_by_email",
176 * requirements = {"email"="\s+"}
177 * )
178 * @Rest\View()
179 */
180 public function showPersonFriendsByEmail(Request $request)
181 {
182 $em = $this->getDoctrine()->getManager();
183 $person = $em->getRepository('App:Person')->find($request->get('email'));
184
185 if (empty($person)) {
186 return new JsonResponse(['message' => 'Person not found'], Response::HTTP_NOT_FOUND);
187 }
188
189 $view = View::create($person->getFriends());
190 $view->setFormat('json');
191
192 return $view;
193 }
194 }