|
4 | 4 |
|
5 | 5 | namespace PhpList\RestBundle\Subscription\Controller; |
6 | 6 |
|
7 | | -use DateTimeImmutable; |
8 | | -use Exception; |
9 | 7 | use OpenApi\Attributes as OA; |
10 | 8 | use PhpList\Core\Domain\Identity\Model\PrivilegeFlag; |
11 | | -use PhpList\Core\Domain\Subscription\Model\Filter\SubscriberHistoryFilter; |
12 | 9 | use PhpList\Core\Domain\Subscription\Model\Subscriber; |
13 | | -use PhpList\Core\Domain\Subscription\Model\SubscriberHistory; |
14 | | -use PhpList\Core\Domain\Subscription\Service\Manager\SubscriberManager; |
15 | 10 | use PhpList\Core\Security\Authentication; |
16 | 11 | use PhpList\RestBundle\Common\Controller\BaseController; |
17 | | -use PhpList\RestBundle\Common\Service\Provider\PaginatedDataProvider; |
18 | 12 | use PhpList\RestBundle\Common\Validator\RequestValidator; |
19 | 13 | use PhpList\RestBundle\Subscription\Request\CreateSubscriberRequest; |
20 | 14 | use PhpList\RestBundle\Subscription\Request\UpdateSubscriberRequest; |
21 | | -use PhpList\RestBundle\Subscription\Serializer\SubscriberNormalizer; |
| 15 | +use PhpList\RestBundle\Subscription\Service\SubscriberService; |
22 | 16 | use Symfony\Bridge\Doctrine\Attribute\MapEntity; |
23 | 17 | use Symfony\Component\HttpFoundation\JsonResponse; |
24 | 18 | use Symfony\Component\HttpFoundation\Request; |
25 | 19 | use Symfony\Component\HttpFoundation\Response; |
26 | | -use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; |
27 | 20 | use Symfony\Component\Routing\Attribute\Route; |
28 | | -use Symfony\Component\Serializer\Normalizer\NormalizerInterface; |
29 | | -use Symfony\Component\Validator\Exception\ValidatorException; |
30 | 21 |
|
31 | 22 | /** |
32 | 23 | * This controller provides REST API access to subscribers. |
|
37 | 28 | #[Route('/subscribers', name: 'subscriber_')] |
38 | 29 | class SubscriberController extends BaseController |
39 | 30 | { |
40 | | - private SubscriberManager $subscriberManager; |
41 | | - private SubscriberNormalizer $subscriberNormalizer; |
42 | | - private PaginatedDataProvider $paginatedDataProvider; |
43 | | - private NormalizerInterface $serializer; |
| 31 | + private SubscriberService $subscriberService; |
44 | 32 |
|
45 | 33 | public function __construct( |
46 | 34 | Authentication $authentication, |
47 | 35 | RequestValidator $validator, |
48 | | - SubscriberManager $subscriberManager, |
49 | | - SubscriberNormalizer $subscriberNormalizer, |
50 | | - PaginatedDataProvider $paginatedDataProvider, |
51 | | - NormalizerInterface $serializer, |
| 36 | + SubscriberService $subscriberService, |
52 | 37 | ) { |
53 | 38 | parent::__construct($authentication, $validator); |
54 | 39 | $this->authentication = $authentication; |
55 | | - $this->subscriberManager = $subscriberManager; |
56 | | - $this->subscriberNormalizer = $subscriberNormalizer; |
57 | | - $this->paginatedDataProvider = $paginatedDataProvider; |
58 | | - $this->serializer = $serializer; |
| 40 | + $this->subscriberService = $subscriberService; |
59 | 41 | } |
60 | 42 |
|
61 | 43 | #[Route('', name: 'create', methods: ['POST'])] |
@@ -111,12 +93,9 @@ public function createSubscriber(Request $request): JsonResponse |
111 | 93 |
|
112 | 94 | /** @var CreateSubscriberRequest $subscriberRequest */ |
113 | 95 | $subscriberRequest = $this->validator->validate($request, CreateSubscriberRequest::class); |
114 | | - $subscriber = $this->subscriberManager->createSubscriber($subscriberRequest->getDto()); |
| 96 | + $subscriberData = $this->subscriberService->createSubscriber($subscriberRequest); |
115 | 97 |
|
116 | | - return $this->json( |
117 | | - $this->subscriberNormalizer->normalize($subscriber, 'json'), |
118 | | - Response::HTTP_CREATED |
119 | | - ); |
| 98 | + return $this->json($subscriberData, Response::HTTP_CREATED); |
120 | 99 | } |
121 | 100 |
|
122 | 101 | #[Route('/{subscriberId}', name: 'update', requirements: ['subscriberId' => '\d+'], methods: ['PUT'])] |
@@ -184,9 +163,9 @@ public function updateSubscriber( |
184 | 163 | } |
185 | 164 | /** @var UpdateSubscriberRequest $updateSubscriberRequest */ |
186 | 165 | $updateSubscriberRequest = $this->validator->validate($request, UpdateSubscriberRequest::class); |
187 | | - $subscriber = $this->subscriberManager->updateSubscriber($updateSubscriberRequest->getDto()); |
| 166 | + $subscriberData = $this->subscriberService->updateSubscriber($updateSubscriberRequest); |
188 | 167 |
|
189 | | - return $this->json($this->subscriberNormalizer->normalize($subscriber, 'json'), Response::HTTP_OK); |
| 168 | + return $this->json($subscriberData, Response::HTTP_OK); |
190 | 169 | } |
191 | 170 |
|
192 | 171 | #[Route('/{subscriberId}', name: 'get_one', requirements: ['subscriberId' => '\d+'], methods: ['GET'])] |
@@ -234,9 +213,9 @@ public function getSubscriber(Request $request, int $subscriberId): JsonResponse |
234 | 213 | { |
235 | 214 | $this->requireAuthentication($request); |
236 | 215 |
|
237 | | - $subscriber = $this->subscriberManager->getSubscriber($subscriberId); |
| 216 | + $subscriberData = $this->subscriberService->getSubscriber($subscriberId); |
238 | 217 |
|
239 | | - return $this->json($this->subscriberNormalizer->normalize($subscriber), Response::HTTP_OK); |
| 218 | + return $this->json($subscriberData, Response::HTTP_OK); |
240 | 219 | } |
241 | 220 |
|
242 | 221 | #[Route('/{subscriberId}/history', name: 'history', requirements: ['subscriberId' => '\d+'], methods: ['GET'])] |
@@ -330,31 +309,10 @@ public function getSubscriberHistory( |
330 | 309 | ): JsonResponse { |
331 | 310 | $this->requireAuthentication($request); |
332 | 311 |
|
333 | | - if (!$subscriber) { |
334 | | - throw $this->createNotFoundException('Subscriber not found.'); |
335 | | - } |
336 | | - |
337 | | - try { |
338 | | - $dateFrom = $request->query->get('date_from'); |
339 | | - $dateFromFormated = $dateFrom ? new DateTimeImmutable($dateFrom) : null; |
340 | | - } catch (Exception $e) { |
341 | | - throw new ValidatorException('Invalid date format. Use format: Y-m-d'); |
342 | | - } |
343 | | - |
344 | | - $filter = new SubscriberHistoryFilter( |
345 | | - subscriber: $subscriber, |
346 | | - ip: $request->query->get('ip'), |
347 | | - dateFrom: $dateFromFormated, |
348 | | - summery: $request->query->get('summery'), |
349 | | - ); |
| 312 | + $historyData = $this->subscriberService->getSubscriberHistory($request, $subscriber); |
350 | 313 |
|
351 | 314 | return $this->json( |
352 | | - data: $this->paginatedDataProvider->getPaginatedList( |
353 | | - request: $request, |
354 | | - normalizer: $this->serializer, |
355 | | - className: SubscriberHistory::class, |
356 | | - filter: $filter |
357 | | - ), |
| 315 | + data: $historyData, |
358 | 316 | status: Response::HTTP_OK, |
359 | 317 | ); |
360 | 318 | } |
@@ -412,7 +370,7 @@ public function deleteSubscriber( |
412 | 370 | if (!$subscriber) { |
413 | 371 | throw $this->createNotFoundException('Subscriber not found.'); |
414 | 372 | } |
415 | | - $this->subscriberManager->deleteSubscriber($subscriber); |
| 373 | + $this->subscriberService->deleteSubscriber($subscriber); |
416 | 374 |
|
417 | 375 | return $this->json(null, Response::HTTP_NO_CONTENT); |
418 | 376 | } |
@@ -457,9 +415,9 @@ public function setSubscriberAsConfirmed(Request $request): Response |
457 | 415 | return new Response('<h1>Missing confirmation code.</h1>', 400); |
458 | 416 | } |
459 | 417 |
|
460 | | - try { |
461 | | - $this->subscriberManager->markAsConfirmedByUniqueId($uniqueId); |
462 | | - } catch (NotFoundHttpException) { |
| 418 | + $subscriber = $this->subscriberService->confirmSubscriber($uniqueId); |
| 419 | + |
| 420 | + if (!$subscriber) { |
463 | 421 | return new Response('<h1>Subscriber isn\'t found or already confirmed.</h1>', 404); |
464 | 422 | } |
465 | 423 |
|
|
0 commit comments