Skip to content

Commit a6686e7

Browse files
committed
SubscribePageNormalizer
1 parent 38ba3d9 commit a6686e7

File tree

3 files changed

+50
-12
lines changed

3 files changed

+50
-12
lines changed

config/services/normalizers.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,3 +97,7 @@ services:
9797
PhpList\RestBundle\Subscription\Serializer\UserBlacklistNormalizer:
9898
tags: [ 'serializer.normalizer' ]
9999
autowire: true
100+
101+
PhpList\RestBundle\Subscription\Serializer\SubscribePageNormalizer:
102+
tags: [ 'serializer.normalizer' ]
103+
autowire: true

src/Subscription/Controller/SubscribePageController.php

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use PhpList\Core\Security\Authentication;
1111
use PhpList\RestBundle\Common\Controller\BaseController;
1212
use PhpList\RestBundle\Common\Validator\RequestValidator;
13+
use PhpList\RestBundle\Subscription\Serializer\SubscribePageNormalizer;
1314
use Symfony\Component\HttpFoundation\JsonResponse;
1415
use Symfony\Component\HttpFoundation\Request;
1516
use Symfony\Component\HttpFoundation\Response;
@@ -22,6 +23,7 @@ public function __construct(
2223
Authentication $authentication,
2324
RequestValidator $validator,
2425
private readonly SubscribePageManager $subscribePageManager,
26+
private readonly SubscribePageNormalizer $normalizer,
2527
) {
2628
parent::__construct($authentication, $validator);
2729
}
@@ -82,12 +84,7 @@ public function getPage(Request $request, int $id): JsonResponse
8284

8385
$page = $this->subscribePageManager->getPage($id);
8486

85-
return $this->json([
86-
'id' => $page->getId(),
87-
'title' => $page->getTitle(),
88-
'active' => $page->isActive(),
89-
'owner_id' => $page->getOwner()?->getId(),
90-
], Response::HTTP_OK);
87+
return $this->json($this->normalizer->normalize($page), Response::HTTP_OK);
9188
}
9289

9390
#[Route('', name: 'create', methods: ['POST'])]
@@ -160,11 +157,6 @@ public function createPage(Request $request): JsonResponse
160157

161158
$page = $this->subscribePageManager->createPage($title, $active, $admin);
162159

163-
return $this->json([
164-
'id' => $page->getId(),
165-
'title' => $page->getTitle(),
166-
'active' => $page->isActive(),
167-
'owner_id' => $page->getOwner()?->getId(),
168-
], Response::HTTP_CREATED);
160+
return $this->json($this->normalizer->normalize($page), Response::HTTP_CREATED);
169161
}
170162
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace PhpList\RestBundle\Subscription\Serializer;
6+
7+
use PhpList\Core\Domain\Subscription\Model\SubscribePage;
8+
use PhpList\RestBundle\Identity\Serializer\AdministratorNormalizer;
9+
use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
10+
11+
class SubscribePageNormalizer implements NormalizerInterface
12+
{
13+
public function __construct(
14+
private readonly AdministratorNormalizer $adminNormalizer,
15+
) {
16+
}
17+
18+
/**
19+
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
20+
*/
21+
public function normalize($object, string $format = null, array $context = []): array
22+
{
23+
if (!$object instanceof SubscribePage) {
24+
return [];
25+
}
26+
27+
return [
28+
'id' => $object->getId(),
29+
'title' => $object->getTitle(),
30+
'active' => $object->isActive(),
31+
'owner' => $this->adminNormalizer->normalize($object->getOwner()),
32+
];
33+
}
34+
35+
/**
36+
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
37+
*/
38+
public function supportsNormalization($data, string $format = null): bool
39+
{
40+
return $data instanceof SubscribePage;
41+
}
42+
}

0 commit comments

Comments
 (0)