Skip to content

Commit c2a0abf

Browse files
committed
ISSUE-345: subscriberListManager methods
1 parent 799e514 commit c2a0abf

File tree

3 files changed

+65
-40
lines changed

3 files changed

+65
-40
lines changed

src/Controller/ListController.php

Lines changed: 35 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,19 @@
55
namespace PhpList\RestBundle\Controller;
66

77
use PhpList\Core\Domain\Model\Subscription\SubscriberList;
8-
use PhpList\Core\Domain\Repository\Subscription\SubscriberRepository;
98
use PhpList\RestBundle\Entity\CreateSubscriberListRequest;
109
use PhpList\RestBundle\Serializer\SubscriberListNormalizer;
10+
use PhpList\RestBundle\Serializer\SubscriberNormalizer;
1111
use PhpList\RestBundle\Service\Manager\SubscriberListManager;
1212
use PhpList\RestBundle\Validator\RequestValidator;
1313
use Symfony\Bridge\Doctrine\Attribute\MapEntity;
1414
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
15-
use PhpList\Core\Domain\Repository\Subscription\SubscriberListRepository;
1615
use PhpList\Core\Security\Authentication;
1716
use PhpList\RestBundle\Controller\Traits\AuthenticationTrait;
1817
use Symfony\Component\HttpFoundation\JsonResponse;
1918
use Symfony\Component\HttpFoundation\Request;
2019
use Symfony\Component\HttpFoundation\Response;
2120
use Symfony\Component\Routing\Attribute\Route;
22-
use Symfony\Component\Serializer\Normalizer\AbstractNormalizer;
23-
use Symfony\Component\Serializer\SerializerInterface;
2421
use OpenApi\Attributes as OA;
2522

2623
/**
@@ -35,24 +32,18 @@ class ListController extends AbstractController
3532
{
3633
use AuthenticationTrait;
3734

38-
private SubscriberListRepository $subscriberListRepository;
39-
private SubscriberRepository $subscriberRepository;
40-
private SerializerInterface $serializer;
35+
private SubscriberListNormalizer $normalizer;
4136
private SubscriberListManager $subscriberListManager;
4237
private RequestValidator $validator;
4338

4439
public function __construct(
4540
Authentication $authentication,
46-
SubscriberListRepository $repository,
47-
SubscriberRepository $subscriberRepository,
48-
SerializerInterface $serializer,
41+
SubscriberListNormalizer $normalizer,
4942
RequestValidator $validator,
5043
SubscriberListManager $subscriberListManager
5144
) {
5245
$this->authentication = $authentication;
53-
$this->subscriberListRepository = $repository;
54-
$this->subscriberRepository = $subscriberRepository;
55-
$this->serializer = $serializer;
46+
$this->normalizer = $normalizer;
5647
$this->validator = $validator;
5748
$this->subscriberListManager = $subscriberListManager;
5849
}
@@ -114,12 +105,13 @@ public function __construct(
114105
public function getLists(Request $request): JsonResponse
115106
{
116107
$this->requireAuthentication($request);
117-
$data = $this->subscriberListRepository->findAll();
118-
$json = $this->serializer->serialize($data, 'json', [
119-
AbstractNormalizer::GROUPS => 'SubscriberList',
120-
]);
108+
$data = $this->subscriberListManager->getAll();
121109

122-
return new JsonResponse($json, Response::HTTP_OK, [], true);
110+
$normalized = array_map(function ($item) {
111+
return $this->normalizer->normalize($item);
112+
}, $data);
113+
114+
return new JsonResponse($normalized, Response::HTTP_OK);
123115
}
124116

125117
#[Route('/{listId}', name: 'get_list', methods: ['GET'])]
@@ -188,11 +180,8 @@ public function getList(
188180
#[MapEntity(mapping: ['listId' => 'id'])] SubscriberList $list
189181
): JsonResponse {
190182
$this->requireAuthentication($request);
191-
$json = $this->serializer->serialize($list, 'json', [
192-
AbstractNormalizer::GROUPS => 'SubscriberList',
193-
]);
194183

195-
return new JsonResponse($json, Response::HTTP_OK, [], true);
184+
return new JsonResponse($this->normalizer->normalize($list), Response::HTTP_OK);
196185
}
197186

198187
#[Route('/{listId}', name: 'delete_list', methods: ['DELETE'])]
@@ -249,9 +238,9 @@ public function deleteList(
249238
): JsonResponse {
250239
$this->requireAuthentication($request);
251240

252-
$this->subscriberListRepository->remove($list);
241+
$this->subscriberListManager->delete($list);
253242

254-
return new JsonResponse(null, Response::HTTP_NO_CONTENT, [], false);
243+
return new JsonResponse(null, Response::HTTP_NO_CONTENT);
255244
}
256245

257246
#[Route('/{listId}/subscribers', name: 'get_subscriber_from_list', methods: ['GET'])]
@@ -294,17 +283,17 @@ public function deleteList(
294283
)]
295284
public function getListMembers(
296285
Request $request,
297-
#[MapEntity(mapping: ['listId' => 'id'])] SubscriberList $list
286+
#[MapEntity(mapping: ['listId' => 'id'])] SubscriberList $list,
287+
SubscriberNormalizer $normalizer
298288
): JsonResponse {
299289
$this->requireAuthentication($request);
300290

301-
$subscribers = $this->subscriberRepository->getSubscribersBySubscribedListId($list->getId());
302-
303-
$json = $this->serializer->serialize($subscribers, 'json', [
304-
AbstractNormalizer::GROUPS => 'SubscriberListMembers',
305-
]);
291+
$subscribers = $this->subscriberListManager->getSubscriberListMembers($list);
292+
$normalized = array_map(function ($item) use ($normalizer) {
293+
return $normalizer->normalize($item);
294+
}, $subscribers);
306295

307-
return new JsonResponse($json, Response::HTTP_OK, [], true);
296+
return new JsonResponse($normalized, Response::HTTP_OK);
308297
}
309298

310299
#[Route('/{listId}/subscribers/count', name: 'get_subscribers_count_from_list', methods: ['GET'])]
@@ -332,7 +321,17 @@ public function getListMembers(
332321
responses: [
333322
new OA\Response(
334323
response: 200,
335-
description: 'Success'
324+
description: 'Success',
325+
content: new OA\JsonContent(
326+
properties: [
327+
new OA\Property(
328+
property: 'subscribers_count',
329+
type: 'integer',
330+
example: 42
331+
)
332+
],
333+
type: 'object'
334+
)
336335
),
337336
new OA\Response(
338337
response: 403,
@@ -346,9 +345,11 @@ public function getSubscribersCount(
346345
#[MapEntity(mapping: ['listId' => 'id'])] SubscriberList $list
347346
): JsonResponse {
348347
$this->requireAuthentication($request);
349-
$json = $this->serializer->serialize(count($list->getSubscribers()), 'json');
350348

351-
return new JsonResponse($json, Response::HTTP_OK, [], true);
349+
return new JsonResponse(
350+
['subscribers_count' => count($list->getSubscribers())],
351+
Response::HTTP_OK,
352+
);
352353
}
353354

354355
#[Route('', name: 'create_list', methods: ['POST'])]

src/Service/Manager/SubscriberListManager.php

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,23 @@
44

55
namespace PhpList\RestBundle\Service\Manager;
66

7+
use PhpList\Core\Domain\Model\Subscription\Subscriber;
78
use PhpList\Core\Domain\Model\Subscription\SubscriberList;
89
use PhpList\Core\Domain\Repository\Subscription\SubscriberListRepository;
10+
use PhpList\Core\Domain\Repository\Subscription\SubscriberRepository;
911
use PhpList\RestBundle\Entity\CreateSubscriberListRequest;
1012

1113
class SubscriberListManager
1214
{
1315
private SubscriberListRepository $subscriberListRepository;
14-
public function __construct(SubscriberListRepository $subscriberListRepository)
15-
{
16+
private SubscriberRepository $subscriberRepository;
17+
18+
public function __construct(
19+
SubscriberListRepository $subscriberListRepository,
20+
SubscriberRepository $subscriberRepository
21+
) {
1622
$this->subscriberListRepository = $subscriberListRepository;
23+
$this->subscriberRepository = $subscriberRepository;
1724
}
1825

1926
public function createSubscriberList(CreateSubscriberListRequest $subscriberListRequest): SubscriberList
@@ -28,4 +35,21 @@ public function createSubscriberList(CreateSubscriberListRequest $subscriberList
2835

2936
return $subscriberList;
3037
}
38+
39+
/** @return SubscriberList[] */
40+
public function getAll(): array
41+
{
42+
return $this->subscriberListRepository->findAll();
43+
}
44+
45+
public function delete(SubscriberList $subscriberList): void
46+
{
47+
$this->subscriberListRepository->remove($subscriberList);
48+
}
49+
50+
/** @return Subscriber[] */
51+
public function getSubscriberListMembers(SubscriberList $list): array
52+
{
53+
return $this->subscriberRepository->getSubscribersBySubscribedListId($list->getId());
54+
}
3155
}

tests/Integration/Controller/ListControllerTest.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -329,18 +329,18 @@ public function testGetSubscribersCountForEmptyListWithValidSession()
329329
$this->loadFixtures([SubscriberListFixture::class, SubscriberFixture::class, SubscriptionFixture::class]);
330330

331331
$this->authenticatedJsonRequest('get', '/api/v2/lists/3/subscribers/count');
332-
$responseContent = $this->getResponseContentAsInt();
332+
$responseData = $this->getDecodedJsonResponseContent();
333333

334-
self::assertSame(0, $responseContent);
334+
self::assertSame(0, $responseData['subscribers_count']);
335335
}
336336

337337
public function testGetSubscribersCountForListWithValidSession()
338338
{
339339
$this->loadFixtures([SubscriberListFixture::class, SubscriberFixture::class, SubscriptionFixture::class]);
340340

341341
$this->authenticatedJsonRequest('get', '/api/v2/lists/2/subscribers/count');
342-
$responseContent = $this->getResponseContentAsInt();
342+
$responseData = $this->getDecodedJsonResponseContent();
343343

344-
self::assertSame(2, $responseContent);
344+
self::assertSame(2, $responseData['subscribers_count']);
345345
}
346346
}

0 commit comments

Comments
 (0)