1 | <?php |
||
23 | class UserController extends BaseController |
||
24 | { |
||
25 | /** |
||
26 | * Registration. |
||
27 | * |
||
28 | * @Route("/api/users", methods={"POST"}) |
||
29 | * |
||
30 | * @param RegisterUserRequest $request |
||
31 | * @param RegisterService $registerService |
||
32 | * @param EventDispatcherInterface $dispatcher |
||
33 | * @param ValidatorInterface $validator |
||
34 | * |
||
35 | * @return JsonResponse|\Symfony\Component\HttpFoundation\Response |
||
36 | */ |
||
37 | 3 | public function postUsers(RegisterUserRequest $request, RegisterService $registerService, EventDispatcherInterface $dispatcher, ValidatorInterface $validator) |
|
38 | { |
||
39 | 3 | if ($this->getUser() !== null) { |
|
40 | throw new AccessDeniedHttpException(); |
||
41 | } |
||
42 | |||
43 | 3 | $registeredUser = $registerService->registerByRequest($request); |
|
44 | 3 | $errors = $validator->validate($registeredUser); |
|
45 | |||
46 | 3 | if ($errors && $errors->count() !== 0) { |
|
47 | 1 | return $request->getErrorResponse($errors); |
|
48 | } |
||
49 | |||
50 | 2 | $em = $this->getDoctrine()->getManager(); |
|
51 | 2 | $em->persist($registeredUser); |
|
52 | 2 | $em->flush(); |
|
53 | |||
54 | 2 | $userRegisteredEvent = new UserRegisteredEvent($registeredUser); |
|
55 | 2 | $dispatcher->dispatch(UserRegisteredEvent::NAME, $userRegisteredEvent); |
|
56 | |||
57 | 2 | return $this->response($registeredUser, 200, [], [ |
|
58 | 2 | 'groups' => ['view'], |
|
59 | ]); |
||
60 | } |
||
61 | |||
62 | /** |
||
63 | * Confirm email. |
||
64 | * |
||
65 | * @Route("/api/confirmEmail", methods={"POST"}) |
||
66 | * |
||
67 | * @param ConfirmEmailRequest $request |
||
68 | * @param ConfirmationTokenRepository $confirmationTokenRepository |
||
69 | * @param TranslatorInterface $translator |
||
70 | * |
||
71 | * @throws |
||
72 | * |
||
73 | * @return JsonResponse |
||
74 | */ |
||
75 | 2 | public function postConfirmEmail(ConfirmEmailRequest $request, ConfirmationTokenRepository $confirmationTokenRepository, TranslatorInterface $translator) |
|
76 | { |
||
77 | 2 | $token = $request->get('token'); |
|
78 | |||
79 | 2 | if (null === $confirmationToken = $confirmationTokenRepository->findByToken($token)) { |
|
80 | 1 | throw new NotFoundHttpException($translator->trans('bad_email_confirmation_token', [ |
|
81 | 1 | 'token' => $token, |
|
82 | 1 | ], 'users')); |
|
83 | } |
||
84 | |||
85 | 1 | $user = $confirmationToken->getUser(); |
|
86 | 1 | $user->confirmEmail(); |
|
87 | |||
88 | 1 | $entityManager = $this->getDoctrine()->getManager(); |
|
89 | 1 | $entityManager->persist($user); |
|
90 | 1 | $entityManager->remove($confirmationToken); |
|
91 | 1 | $entityManager->flush(); |
|
92 | |||
93 | 1 | return new JsonResponse(null, 202); |
|
94 | } |
||
95 | |||
96 | /** |
||
97 | * todo use param converter? |
||
98 | * Get single user. |
||
99 | * |
||
100 | * @Route("/api/users/{id}", methods={"GET"}, requirements={"id"="\d+"}) |
||
101 | * |
||
102 | * @param $id |
||
103 | * @param TranslatorInterface $translator |
||
104 | * |
||
105 | * @return JsonResponse |
||
106 | */ |
||
107 | 3 | public function getUsers($id, TranslatorInterface $translator) |
|
108 | { |
||
109 | 3 | $this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY'); |
|
110 | /** @var $userRepository \App\Users\Repository\UserRepository */ |
||
111 | 2 | $userRepository = $this->getDoctrine()->getRepository(User::class); |
|
112 | 2 | $user = $userRepository->find($id); |
|
113 | |||
114 | 2 | if ($user === null) { |
|
115 | 1 | throw new NotFoundHttpException($translator->trans('not_found_by_id', [ |
|
116 | 1 | 'user_id' => $id, |
|
117 | 1 | ], 'users')); |
|
118 | } |
||
119 | |||
120 | 1 | return $this->response($user, 200, [], [ |
|
121 | 1 | 'groups' => ['view'], |
|
122 | ]); |
||
123 | } |
||
124 | |||
125 | /** |
||
126 | * Get single user by username. |
||
127 | * |
||
128 | * @Route("/api/users/byUsername/{username}", methods={"GET"}) |
||
129 | * |
||
130 | * @param User $user |
||
131 | * |
||
132 | * @return JsonResponse |
||
133 | */ |
||
134 | public function getUsersByUsername(User $user) |
||
135 | { |
||
136 | return $this->response($user, 200, [], [ |
||
137 | 'groups' => ['view'], |
||
138 | ]); |
||
139 | } |
||
140 | |||
141 | /** |
||
142 | * @Route("/api/users/{id}", methods={"POST", "PUT", "PATCH"}, requirements={"id"="\d+"}) |
||
143 | * |
||
144 | * @param User $user |
||
145 | * @param UpdateUserRequest $request |
||
146 | * |
||
147 | * @throws \Exception |
||
148 | * |
||
149 | * @return JsonResponse |
||
150 | */ |
||
151 | 4 | public function putUsers(User $user, UpdateUserRequest $request) |
|
152 | { |
||
153 | 4 | $currentUser = $this->getUser(); |
|
154 | 4 | if ($currentUser === null) { |
|
155 | 1 | $this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY'); |
|
156 | } |
||
157 | |||
158 | /** @var $currentUser User */ |
||
159 | 3 | if ($currentUser->getId() !== $user->getId()) { |
|
160 | 2 | $this->denyAccessUnlessGranted(UserRoles::ROLE_ADMIN); |
|
161 | } |
||
162 | |||
163 | 2 | $profile = $user->getProfile(); |
|
164 | 2 | $profileData = $request->get('profile'); |
|
165 | 2 | $profile->setFirstName($profileData['first_name']); |
|
166 | 2 | $profile->setLastName($profileData['last_name']); |
|
167 | 2 | $profile->setBirthDate(new \DateTimeImmutable($profileData['birth_date'])); |
|
168 | 2 | $profile->setAbout($profileData['about']); |
|
169 | 2 | $profile->setPublicEmail($profileData['public_email']); |
|
170 | 2 | $profile->setCountryCode($profileData['country_code']); |
|
171 | 2 | $this->getDoctrine()->getManager()->flush(); |
|
172 | |||
173 | 2 | return new JsonResponse(null, 202); |
|
174 | } |
||
175 | |||
176 | /** |
||
177 | * Get all users. |
||
178 | * |
||
179 | * @Route("/api/users", methods={"GET"}) |
||
180 | */ |
||
181 | 3 | public function getAll() |
|
195 | |||
196 | /** |
||
197 | * @Route("/api/users/me", methods={"GET"}) |
||
198 | */ |
||
199 | 5 | public function getMe() |
|
207 | } |
||
208 |