Skip to content

Commit 462128a

Browse files
committed
Add: PaginatedFilter
1 parent ddaf6bd commit 462128a

8 files changed

Lines changed: 48 additions & 20 deletions

File tree

src/Common/Service/Provider/PaginatedDataProvider.php

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public function getPaginatedList(
2727
Request $request,
2828
NormalizerInterface $normalizer,
2929
string $className,
30-
FilterRequestInterface $filter = null
30+
FilterRequestInterface $filter
3131
): array {
3232
$pagination = $this->paginationFactory->fromRequest($request);
3333

@@ -37,11 +37,10 @@ public function getPaginatedList(
3737
throw new RuntimeException('Repository not found');
3838
}
3939

40-
$result = $repository->getFilteredAfterId(
41-
lastId: $pagination->afterId,
42-
limit: $pagination->limit,
43-
filter: $filter,
44-
);
40+
$filter->setLimit($pagination->limit);
41+
$filter->setLastId($pagination->afterId);
42+
43+
$result = $repository->getFilteredAfterId(filter: $filter);
4544

4645
$normalizedItems = array_map(
4746
fn($item) => $normalizer->normalize($item, 'json'),
@@ -50,9 +49,9 @@ public function getPaginatedList(
5049

5150
return $this->paginationNormalizer->normalize(
5251
new CursorPaginationResult(
53-
$normalizedItems,
54-
$result->getLimit(),
55-
$result->getTotal(),
52+
items: $normalizedItems,
53+
limit: $result->getLimit(),
54+
total: $result->getTotal(),
5655
)
5756
);
5857
}

src/Identity/Controller/AdminAttributeDefinitionController.php

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
use Doctrine\ORM\EntityManagerInterface;
88
use OpenApi\Attributes as OA;
9+
use PhpList\Core\Domain\Common\Model\Filter\PaginatedFilter;
910
use PhpList\Core\Domain\Identity\Model\AdminAttributeDefinition;
1011
use PhpList\Core\Domain\Identity\Service\Manager\AdminAttributeDefinitionManager;
1112
use PhpList\Core\Security\Authentication;
@@ -279,9 +280,10 @@ public function getPaginated(Request $request): JsonResponse
279280

280281
return $this->json(
281282
$this->paginatedDataProvider->getPaginatedList(
282-
$request,
283-
$this->normalizer,
284-
AdminAttributeDefinition::class,
283+
request: $request,
284+
normalizer: $this->normalizer,
285+
className: AdminAttributeDefinition::class,
286+
filter: new PaginatedFilter(),
285287
),
286288
Response::HTTP_OK
287289
);

src/Identity/Controller/AdministratorController.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
use Doctrine\ORM\EntityManagerInterface;
88
use OpenApi\Attributes as OA;
9+
use PhpList\Core\Domain\Common\Model\Filter\PaginatedFilter;
910
use PhpList\Core\Domain\Identity\Model\Administrator;
1011
use PhpList\Core\Domain\Identity\Service\Manager\AdministratorManager;
1112
use PhpList\Core\Security\Authentication;
@@ -102,7 +103,12 @@ public function getAdministrators(Request $request): JsonResponse
102103
$this->requireAuthentication($request);
103104

104105
return $this->json(
105-
$this->paginatedProvider->getPaginatedList($request, $this->normalizer, Administrator::class),
106+
$this->paginatedProvider->getPaginatedList(
107+
request: $request,
108+
normalizer: $this->normalizer,
109+
className: Administrator::class,
110+
filter: new PaginatedFilter(),
111+
),
106112
Response::HTTP_OK
107113
);
108114
}

src/Messaging/Controller/TemplateController.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
use Doctrine\ORM\EntityManagerInterface;
88
use OpenApi\Attributes as OA;
9+
use PhpList\Core\Domain\Common\Model\Filter\PaginatedFilter;
910
use PhpList\Core\Domain\Messaging\Model\Template;
1011
use PhpList\Core\Domain\Messaging\Service\Manager\TemplateManager;
1112
use PhpList\Core\Security\Authentication;
@@ -108,6 +109,7 @@ public function getTemplates(Request $request): JsonResponse
108109
request: $request,
109110
normalizer: $this->normalizer,
110111
className: Template::class,
112+
filter: new PaginatedFilter(),
111113
),
112114
Response::HTTP_OK
113115
);

src/Subscription/Controller/SubscriberAttributeDefinitionController.php

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
use Doctrine\ORM\EntityManagerInterface;
88
use OpenApi\Attributes as OA;
9+
use PhpList\Core\Domain\Common\Model\Filter\PaginatedFilter;
910
use PhpList\Core\Domain\Subscription\Model\SubscriberAttributeDefinition;
1011
use PhpList\Core\Domain\Subscription\Repository\SubscriberAttributeDefinitionRepository;
1112
use PhpList\Core\Domain\Subscription\Service\Manager\AttributeDefinitionManager;
@@ -282,9 +283,10 @@ public function getPaginated(Request $request): JsonResponse
282283

283284
return $this->json(
284285
$this->paginatedDataProvider->getPaginatedList(
285-
$request,
286-
$this->normalizer,
287-
SubscriberAttributeDefinition::class,
286+
request: $request,
287+
normalizer: $this->normalizer,
288+
className: SubscriberAttributeDefinition::class,
289+
filter: new PaginatedFilter(),
288290
),
289291
Response::HTTP_OK
290292
);

src/Subscription/Controller/SubscriberListController.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
use Doctrine\ORM\EntityManagerInterface;
88
use OpenApi\Attributes as OA;
9+
use PhpList\Core\Domain\Common\Model\Filter\PaginatedFilter;
910
use PhpList\Core\Domain\Subscription\Model\SubscriberList;
1011
use PhpList\Core\Domain\Subscription\Service\Manager\SubscriberListManager;
1112
use PhpList\Core\Security\Authentication;
@@ -108,7 +109,12 @@ public function getLists(Request $request): JsonResponse
108109
$this->requireAuthentication($request);
109110

110111
return $this->json(
111-
$this->paginatedDataProvider->getPaginatedList($request, $this->normalizer, SubscriberList::class),
112+
$this->paginatedDataProvider->getPaginatedList(
113+
request: $request,
114+
normalizer: $this->normalizer,
115+
className: SubscriberList::class,
116+
filter: new PaginatedFilter(),
117+
),
112118
Response::HTTP_OK
113119
);
114120
}

tests/Helpers/DummyPaginatableRepository.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
class DummyPaginatableRepository extends EntityRepository implements PaginatableRepositoryInterface
1313
{
14-
public function getFilteredAfterId(int $lastId, int $limit, ?FilterRequestInterface $filter = null): PaginatedResult
14+
public function getFilteredAfterId(FilterRequestInterface $filter): PaginatedResult
1515
{
1616
return new PaginatedResult(
1717
[

tests/Unit/Common/Service/Provider/PaginatedDataProviderTest.php

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
namespace PhpList\RestBundle\Tests\Unit\Common\Service\Provider;
66

77
use Doctrine\ORM\EntityManagerInterface;
8+
use PhpList\Core\Domain\Common\Model\Filter\PaginatedFilter;
89
use PhpList\RestBundle\Common\Dto\CursorPaginationResult;
910
use PhpList\RestBundle\Common\Request\PaginationCursorRequest;
1011
use PhpList\RestBundle\Common\Serializer\CursorPaginationNormalizer;
@@ -53,7 +54,12 @@ public function testGetPaginatedListSuccess(): void
5354

5455
$provider = new PaginatedDataProvider($paginationNormalizer, $paginationFactory, $entityManager);
5556

56-
$result = $provider->getPaginatedList($request, $normalizer, 'Some\\Entity\\Class');
57+
$result = $provider->getPaginatedList(
58+
request: $request,
59+
normalizer: $normalizer,
60+
className: 'Some\\Entity\\Class',
61+
filter: new PaginatedFilter(),
62+
);
5763

5864
$this->assertIsArray($result);
5965
$this->assertArrayHasKey('items', $result);
@@ -80,6 +86,11 @@ public function testThrowsIfRepositoryIsNotPaginatable(): void
8086
$this->expectException(RuntimeException::class);
8187
$this->expectExceptionMessage('Repository not found');
8288

83-
$provider->getPaginatedList($request, $normalizer, 'NonPaginatableClass');
89+
$provider->getPaginatedList(
90+
request: $request,
91+
normalizer: $normalizer,
92+
className: 'NonPaginatableClass',
93+
filter: new PaginatedFilter(),
94+
);
8495
}
8596
}

0 commit comments

Comments
 (0)