diff --git a/src/Matiux/DDDStarterPack/Aggregate/Domain/Repository/Filter/FilterApplier.php b/src/Matiux/DDDStarterPack/Aggregate/Domain/Repository/Filter/FilterApplier.php new file mode 100644 index 0000000..b02607c --- /dev/null +++ b/src/Matiux/DDDStarterPack/Aggregate/Domain/Repository/Filter/FilterApplier.php @@ -0,0 +1,21 @@ + $appliers - * @param array $neededFilters + * @param array $filterAppliers + * @param array $neededFilters */ - public function __construct(array $appliers, protected array $neededFilters) + public function __construct(array $filterAppliers, protected array $neededFilters) { - $this->setAppliers($appliers); + $this->setAppliers($filterAppliers); } /** - * @param FilterParamsApplier[] $appliers + * @param FilterApplier[] $filterAppliers */ - private function setAppliers(array $appliers): void + private function setAppliers(array $filterAppliers): void { - foreach ($appliers as $applier) { + foreach ($filterAppliers as $applier) { $this->addApplier($applier); } } - public function addApplier(FilterParamsApplier $applier): void + public function addApplier(FilterApplier $filterApplier): void { - $key = $applier->key(); + $key = $filterApplier->key(); - if (isset($this->appliers[$key])) { + if (isset($this->filterAppliers[$key])) { throw new InvalidArgumentException("Applier for key '{$key}' is already set"); } - $this->appliers[$key] = $applier; + $this->filterAppliers[$key] = $filterApplier; } /** @@ -63,7 +63,7 @@ public function getFilterValueForKey(string $key, string $default = ''): mixed public function applyToTarget(mixed $target): void { - foreach ($this->appliers as $applier) { + foreach ($this->filterAppliers as $applier) { if ($applier->supports($this)) { $applier->apply($target, $this); } diff --git a/src/Matiux/DDDStarterPack/Aggregate/Domain/Repository/Filter/FilterBuilder.php b/src/Matiux/DDDStarterPack/Aggregate/Domain/Repository/Filter/FilterBuilder.php new file mode 100644 index 0000000..b8458bb --- /dev/null +++ b/src/Matiux/DDDStarterPack/Aggregate/Domain/Repository/Filter/FilterBuilder.php @@ -0,0 +1,53 @@ + $filterAppliers + */ + public function __construct($filterAppliers = []) + { + if ($filterAppliers instanceof Traversable) { + $filterAppliers = iterator_to_array($filterAppliers); + } + + foreach ($filterAppliers as $applier) { + $this->addApplier($applier); + } + } + + public function addApplier(FilterApplier $filterApplier): void + { + if ($this->frozen) { + throw new LogicException('The builder is frozen'); + } + + $key = $filterApplier->key(); + + if (isset($this->filterAppliers[$key])) { + throw new InvalidArgumentException("Applier for key '{$key}' is already set"); + } + + $this->filterAppliers[$key] = $filterApplier; + } + + public function build(array $neededFilters): FilterApplierRegistry + { + $this->frozen = true; + + return new FilterApplierRegistry(array_values($this->filterAppliers), $neededFilters); + } +} diff --git a/src/Matiux/DDDStarterPack/Aggregate/Domain/Repository/Filter/FilterParamsApplier.php b/src/Matiux/DDDStarterPack/Aggregate/Domain/Repository/Filter/FilterParamsApplier.php deleted file mode 100644 index 2a09c1e..0000000 --- a/src/Matiux/DDDStarterPack/Aggregate/Domain/Repository/Filter/FilterParamsApplier.php +++ /dev/null @@ -1,21 +0,0 @@ - $appliers - */ - public function __construct($appliers = []) - { - if ($appliers instanceof Traversable) { - $appliers = iterator_to_array($appliers); - } - - foreach ($appliers as $applier) { - $this->addApplier($applier); - } - } - - public function addApplier(FilterParamsApplier $applier): void - { - if ($this->frozen) { - throw new LogicException('The builder is frozen'); - } - - $key = $applier->key(); - - if (isset($this->appliers[$key])) { - throw new InvalidArgumentException("Applier for key '{$key}' is already set"); - } - - $this->appliers[$key] = $applier; - } - - public function build(array $neededFilters): FilterParams - { - $this->frozen = true; - - return new FilterParams(array_values($this->appliers), $neededFilters); - } -} diff --git a/src/Matiux/DDDStarterPack/Aggregate/Domain/Repository/Filter/PaginationFilterRequest.php b/src/Matiux/DDDStarterPack/Aggregate/Domain/Repository/Filter/PaginationFilterRequest.php index 6243262..1ec845e 100644 --- a/src/Matiux/DDDStarterPack/Aggregate/Domain/Repository/Filter/PaginationFilterRequest.php +++ b/src/Matiux/DDDStarterPack/Aggregate/Domain/Repository/Filter/PaginationFilterRequest.php @@ -14,8 +14,8 @@ trait PaginationFilterRequest public function withPagination(null|int $page, null|int $perPage): self { if ($page && $perPage) { - $this->paginationFilters[PaginationFilterParamsApplierKeys::PAGE] = $page; - $this->paginationFilters[PaginationFilterParamsApplierKeys::PER_PAGE] = $perPage; + $this->paginationFilters[PaginationKeyFilterApplier::PAGE] = $page; + $this->paginationFilters[PaginationKeyFilterApplier::PER_PAGE] = $perPage; } return $this; diff --git a/src/Matiux/DDDStarterPack/Aggregate/Domain/Repository/Filter/PaginationFilterParamsApplierKeys.php b/src/Matiux/DDDStarterPack/Aggregate/Domain/Repository/Filter/PaginationKeyFilterApplier.php similarity index 79% rename from src/Matiux/DDDStarterPack/Aggregate/Domain/Repository/Filter/PaginationFilterParamsApplierKeys.php rename to src/Matiux/DDDStarterPack/Aggregate/Domain/Repository/Filter/PaginationKeyFilterApplier.php index 0af4093..ca92e90 100644 --- a/src/Matiux/DDDStarterPack/Aggregate/Domain/Repository/Filter/PaginationFilterParamsApplierKeys.php +++ b/src/Matiux/DDDStarterPack/Aggregate/Domain/Repository/Filter/PaginationKeyFilterApplier.php @@ -4,7 +4,7 @@ namespace DDDStarterPack\Aggregate\Domain\Repository\Filter; -interface PaginationFilterParamsApplierKeys +interface PaginationKeyFilterApplier { public const PAGE = 'page'; public const PER_PAGE = 'per_page'; diff --git a/src/Matiux/DDDStarterPack/Aggregate/Domain/Repository/Filter/SortingFilterRequest.php b/src/Matiux/DDDStarterPack/Aggregate/Domain/Repository/Filter/SortingFilterRequest.php index 330bd15..6f2d261 100644 --- a/src/Matiux/DDDStarterPack/Aggregate/Domain/Repository/Filter/SortingFilterRequest.php +++ b/src/Matiux/DDDStarterPack/Aggregate/Domain/Repository/Filter/SortingFilterRequest.php @@ -11,8 +11,8 @@ trait SortingFilterRequest public function withSorting(null|string $sortingField, null|string $sortingDirection): self { if ($sortingField && $sortingDirection) { - $this->sortingFilters[SortingFilterParamsApplierKeys::SORT] = $sortingField; - $this->sortingFilters[SortingFilterParamsApplierKeys::SORT_DIRECTION] = $sortingDirection; + $this->sortingFilters[SortingKeyFilterApplier::SORT] = $sortingField; + $this->sortingFilters[SortingKeyFilterApplier::SORT_DIRECTION] = $sortingDirection; } return $this; diff --git a/src/Matiux/DDDStarterPack/Aggregate/Domain/Repository/Filter/SortingFilterParamsApplierKeys.php b/src/Matiux/DDDStarterPack/Aggregate/Domain/Repository/Filter/SortingKeyFilterApplier.php similarity index 82% rename from src/Matiux/DDDStarterPack/Aggregate/Domain/Repository/Filter/SortingFilterParamsApplierKeys.php rename to src/Matiux/DDDStarterPack/Aggregate/Domain/Repository/Filter/SortingKeyFilterApplier.php index 1c83028..5504249 100644 --- a/src/Matiux/DDDStarterPack/Aggregate/Domain/Repository/Filter/SortingFilterParamsApplierKeys.php +++ b/src/Matiux/DDDStarterPack/Aggregate/Domain/Repository/Filter/SortingKeyFilterApplier.php @@ -4,7 +4,7 @@ namespace DDDStarterPack\Aggregate\Domain\Repository\Filter; -interface SortingFilterParamsApplierKeys +interface SortingKeyFilterApplier { public const SORT = 'sort_field'; public const SORT_DIRECTION = 'sort_direction'; diff --git a/src/Matiux/DDDStarterPack/Aggregate/Infrastructure/Doctrine/Repository/DoctrineFilterParamsRepository.php b/src/Matiux/DDDStarterPack/Aggregate/Infrastructure/Doctrine/Repository/DoctrineFilterParamsRepository.php index adbe068..3cd4348 100644 --- a/src/Matiux/DDDStarterPack/Aggregate/Infrastructure/Doctrine/Repository/DoctrineFilterParamsRepository.php +++ b/src/Matiux/DDDStarterPack/Aggregate/Infrastructure/Doctrine/Repository/DoctrineFilterParamsRepository.php @@ -4,7 +4,7 @@ namespace DDDStarterPack\Aggregate\Infrastructure\Doctrine\Repository; -use DDDStarterPack\Aggregate\Domain\Repository\Filter\FilterParams; +use DDDStarterPack\Aggregate\Domain\Repository\Filter\FilterApplierRegistry; use DDDStarterPack\Aggregate\Domain\Repository\Paginator\Paginator; use Doctrine\ORM\QueryBuilder; use Webmozart\Assert\Assert; @@ -15,27 +15,27 @@ abstract class DoctrineFilterParamsRepository extends DoctrineRepository { /** - * @param FilterParams $filterParams + * @param FilterApplierRegistry $filterApplierRegistry * * @return Paginator */ - protected function doByFilterParamsWithPagination(FilterParams $filterParams): Paginator + protected function doByFilterParamsWithPagination(FilterApplierRegistry $filterApplierRegistry): Paginator { - $qb = $this->createQuery($filterParams); + $qb = $this->createQuery($filterApplierRegistry); - [$offset, $limit] = $this->calculatePagination($filterParams, $qb); + [$offset, $limit] = $this->calculatePagination($filterApplierRegistry, $qb); return $this->createPaginator($qb, $offset, $limit); } /** - * @param FilterParams $filterParams + * @param FilterApplierRegistry $filterApplierRegistry * * @return T[] */ - protected function doByFilterParams(FilterParams $filterParams): array + protected function doByFilterParams(FilterApplierRegistry $filterApplierRegistry): array { - $qb = $this->createQuery($filterParams); + $qb = $this->createQuery($filterApplierRegistry); $results = $qb->getQuery()->getResult(); @@ -44,25 +44,25 @@ protected function doByFilterParams(FilterParams $filterParams): array return $results; } - private function createQuery(FilterParams $filterParams): QueryBuilder + private function createQuery(FilterApplierRegistry $filterApplierRegistry): QueryBuilder { $qb = $this->em->createQueryBuilder(); $qb->select($this->getEntityAliasName()) ->from($this->getEntityClassName(), $this->getEntityAliasName()); - $filterParams->applyToTarget($qb); + $filterApplierRegistry->applyToTarget($qb); return $qb; } /** - * @param FilterParams $filterParams - * @param QueryBuilder $qb + * @param FilterApplierRegistry $filterApplierRegistry + * @param QueryBuilder $qb * * @return list */ - protected function calculatePagination(FilterParams $filterParams, QueryBuilder $qb): array + protected function calculatePagination(FilterApplierRegistry $filterApplierRegistry, QueryBuilder $qb): array { $result = $qb->getQuery()->getResult(); @@ -73,11 +73,11 @@ protected function calculatePagination(FilterParams $filterParams, QueryBuilder $offset = 0; $limit = 0 != $totalResult ? $totalResult : 1; - if (-1 != $filterParams->getFilterValueForKey('per_page')) { - $offset = $this->calculateOffset($filterParams); + if (-1 != $filterApplierRegistry->getFilterValueForKey('per_page')) { + $offset = $this->calculateOffset($filterApplierRegistry); /** @var int $limit */ - $limit = $filterParams->getFilterValueForKey('per_page'); + $limit = $filterApplierRegistry->getFilterValueForKey('per_page'); } return [intval($offset), intval($limit)]; @@ -92,13 +92,13 @@ protected function calculatePagination(FilterParams $filterParams, QueryBuilder */ abstract protected function createPaginator(QueryBuilder $qb, int $offset, int $limit): Paginator; - private function calculateOffset(FilterParams $filterParams): int + private function calculateOffset(FilterApplierRegistry $filterApplierRegistry): int { /** @var int $page */ - $page = $filterParams->getFilterValueForKey('page'); + $page = $filterApplierRegistry->getFilterValueForKey('page'); /** @var int $perPage */ - $perPage = $filterParams->getFilterValueForKey('per_page'); + $perPage = $filterApplierRegistry->getFilterValueForKey('per_page'); return ($page - 1) * $perPage; } diff --git a/src/Matiux/DDDStarterPack/Aggregate/Infrastructure/Doctrine/Repository/Filter/DoctrineFilterApplier.php b/src/Matiux/DDDStarterPack/Aggregate/Infrastructure/Doctrine/Repository/Filter/DoctrineFilterApplier.php new file mode 100644 index 0000000..a2fd1f1 --- /dev/null +++ b/src/Matiux/DDDStarterPack/Aggregate/Infrastructure/Doctrine/Repository/Filter/DoctrineFilterApplier.php @@ -0,0 +1,21 @@ + + */ +abstract class DoctrineFilterApplier implements FilterApplier +{ + /** + * @param QueryBuilder $target + * @param FilterApplierRegistry $filterApplierRegistry + */ + abstract public function apply($target, FilterApplierRegistry $filterApplierRegistry): void; +} diff --git a/src/Matiux/DDDStarterPack/Aggregate/Infrastructure/Doctrine/Repository/Filter/DoctrineFilterParamsApplier.php b/src/Matiux/DDDStarterPack/Aggregate/Infrastructure/Doctrine/Repository/Filter/DoctrineFilterParamsApplier.php deleted file mode 100644 index f521e92..0000000 --- a/src/Matiux/DDDStarterPack/Aggregate/Infrastructure/Doctrine/Repository/Filter/DoctrineFilterParamsApplier.php +++ /dev/null @@ -1,21 +0,0 @@ - - */ -abstract class DoctrineFilterParamsApplier implements FilterParamsApplier -{ - /** - * @param QueryBuilder $target - * @param FilterParams $filterParams - */ - abstract public function apply($target, FilterParams $filterParams): void; -} diff --git a/src/Matiux/DDDStarterPack/Aggregate/Infrastructure/Doctrine/Repository/Filter/DoctrineGenericPaginationApplier.php b/src/Matiux/DDDStarterPack/Aggregate/Infrastructure/Doctrine/Repository/Filter/DoctrineGenericPaginationApplier.php index f4e844f..d18eff7 100644 --- a/src/Matiux/DDDStarterPack/Aggregate/Infrastructure/Doctrine/Repository/Filter/DoctrineGenericPaginationApplier.php +++ b/src/Matiux/DDDStarterPack/Aggregate/Infrastructure/Doctrine/Repository/Filter/DoctrineGenericPaginationApplier.php @@ -4,10 +4,10 @@ namespace DDDStarterPack\Aggregate\Infrastructure\Doctrine\Repository\Filter; -use DDDStarterPack\Aggregate\Domain\Repository\Filter\FilterParams; +use DDDStarterPack\Aggregate\Domain\Repository\Filter\FilterApplierRegistry; use Doctrine\ORM\QueryBuilder; -abstract class DoctrineGenericPaginationApplier extends DoctrineFilterParamsApplier +abstract class DoctrineGenericPaginationApplier extends DoctrineFilterApplier { protected const KEY = 'pagination'; @@ -23,16 +23,16 @@ public function key(): string /** * @psalm-param QueryBuilder $target * - * @param FilterParams $filterParams - * @param mixed $target + * @param FilterApplierRegistry $filterApplierRegistry + * @param mixed $target */ - public function apply($target, FilterParams $filterParams): void + public function apply($target, FilterApplierRegistry $filterApplierRegistry): void { /** @var int $page */ - $page = $filterParams->getFilterValueForKey($this->pageKey(), '1'); + $page = $filterApplierRegistry->getFilterValueForKey($this->pageKey(), '1'); /** @var int $perPage */ - $perPage = $filterParams->getFilterValueForKey($this->perPageKey()); + $perPage = $filterApplierRegistry->getFilterValueForKey($this->perPageKey()); if (-1 !== $perPage) { $offset = ($page - 1) * $perPage; diff --git a/src/Matiux/DDDStarterPack/Aggregate/Infrastructure/Doctrine/Repository/Filter/DoctrineGenericSortApplier.php b/src/Matiux/DDDStarterPack/Aggregate/Infrastructure/Doctrine/Repository/Filter/DoctrineGenericSortApplier.php index 5d87c47..5d0b2f3 100644 --- a/src/Matiux/DDDStarterPack/Aggregate/Infrastructure/Doctrine/Repository/Filter/DoctrineGenericSortApplier.php +++ b/src/Matiux/DDDStarterPack/Aggregate/Infrastructure/Doctrine/Repository/Filter/DoctrineGenericSortApplier.php @@ -4,12 +4,12 @@ namespace DDDStarterPack\Aggregate\Infrastructure\Doctrine\Repository\Filter; -use DDDStarterPack\Aggregate\Domain\Repository\Filter\FilterParams; +use DDDStarterPack\Aggregate\Domain\Repository\Filter\FilterApplierRegistry; use Doctrine\ORM\QueryBuilder; use InvalidArgumentException; use LogicException; -abstract class DoctrineGenericSortApplier extends DoctrineFilterParamsApplier +abstract class DoctrineGenericSortApplier extends DoctrineFilterApplier { protected const KEY = 'sorting'; @@ -28,11 +28,11 @@ public function key(): string /** * @param QueryBuilder $target */ - public function apply($target, FilterParams $filterParams): void + public function apply($target, FilterApplierRegistry $filterApplierRegistry): void { try { - $sortField = (string) $filterParams->getFilterValueForKey($this->sortKey()); - $sortDirection = (string) $filterParams->getFilterValueForKey($this->sortDirectionKey(), 'ASC'); + $sortField = (string) $filterApplierRegistry->getFilterValueForKey($this->sortKey()); + $sortDirection = (string) $filterApplierRegistry->getFilterValueForKey($this->sortDirectionKey(), 'ASC'); if (!array_key_exists($sortField, $this->fieldsMap)) { throw new LogicException(sprintf('Invalid sort key: %s', $sortField)); diff --git a/tests/Integration/DDDStarterPack/Aggregate/Infrastructure/Doctrine/Repository/DoctrineFilterParamsRepositoryTest.php b/tests/Integration/DDDStarterPack/Aggregate/Infrastructure/Doctrine/Repository/DoctrineFilterParamsRepositoryTest.php index 98236f5..5b04535 100644 --- a/tests/Integration/DDDStarterPack/Aggregate/Infrastructure/Doctrine/Repository/DoctrineFilterParamsRepositoryTest.php +++ b/tests/Integration/DDDStarterPack/Aggregate/Infrastructure/Doctrine/Repository/DoctrineFilterParamsRepositoryTest.php @@ -5,8 +5,8 @@ namespace Tests\Integration\DDDStarterPack\Aggregate\Infrastructure\Doctrine\Repository; use ArrayObject; -use DDDStarterPack\Aggregate\Domain\Repository\Filter\FilterParams; -use DDDStarterPack\Aggregate\Domain\Repository\Filter\FilterParamsBuilder; +use DDDStarterPack\Aggregate\Domain\Repository\Filter\FilterApplierRegistry; +use DDDStarterPack\Aggregate\Domain\Repository\Filter\FilterBuilder; use DDDStarterPack\Aggregate\Domain\Repository\Paginator\Paginator; use DDDStarterPack\Aggregate\Infrastructure\Doctrine\Repository\DoctrineFilterParamsRepository; use Doctrine\Bundle\DoctrineBundle\Registry; @@ -55,7 +55,7 @@ public function it_should_use_filterparams_in_repository(): void $this->repository->aggiungi(Person::crea(PersonId::create(), 'B_Met', 35)); $this->repository->aggiungi(Person::crea(PersonId::create(), 'Z_Teo', 35)); - $filterParamsBuilder = new FilterParamsBuilder(); + $filterParamsBuilder = new FilterBuilder(); $filterParamsBuilder->addApplier(new DoctrineSortApplier()); $filterParamsBuilder->addApplier(new DoctrinePaginationApplier()); @@ -85,12 +85,12 @@ public function aggiungi(Person $person): void $this->em->flush(); } - public function byFilterParamsWithPagination(FilterParams $filterParams): Paginator + public function byFilterParamsWithPagination(FilterApplierRegistry $filterParams): Paginator { return $this->doByFilterParamsWithPagination($filterParams); } - public function byFilterParams(FilterParams $filterParams): array + public function byFilterParams(FilterApplierRegistry $filterParams): array { return $this->doByFilterParams($filterParams); } diff --git a/tests/Integration/DDDStarterPack/Aggregate/Infrastructure/Doctrine/Repository/Filter/DoctrineGenericPaginationApplierTest.php b/tests/Integration/DDDStarterPack/Aggregate/Infrastructure/Doctrine/Repository/Filter/DoctrineGenericPaginationApplierTest.php index b055d0c..4ab73f8 100644 --- a/tests/Integration/DDDStarterPack/Aggregate/Infrastructure/Doctrine/Repository/Filter/DoctrineGenericPaginationApplierTest.php +++ b/tests/Integration/DDDStarterPack/Aggregate/Infrastructure/Doctrine/Repository/Filter/DoctrineGenericPaginationApplierTest.php @@ -4,7 +4,7 @@ namespace Tests\Integration\DDDStarterPack\Aggregate\Infrastructure\Doctrine\Repository\Filter; -use DDDStarterPack\Aggregate\Domain\Repository\Filter\FilterParamsBuilder; +use DDDStarterPack\Aggregate\Domain\Repository\Filter\FilterBuilder; use PHPUnit\Framework\TestCase; use Tests\Support\Model\Doctrine\DoctrinePaginationApplier; use Tests\Support\Model\Person; @@ -37,7 +37,7 @@ public function apply_pagination_to_query_builder(int $page, int $perPage, int $ $qb->select('p')->from(Person::class, 'p'); - $filterParamsBuilder = new FilterParamsBuilder(); + $filterParamsBuilder = new FilterBuilder(); $filterParamsBuilder->addApplier(new DoctrinePaginationApplier()); $filterParams = $filterParamsBuilder->build(['page' => $page, 'per_page' => $perPage]); $filterParams->applyToTarget($qb); diff --git a/tests/Integration/DDDStarterPack/Aggregate/Infrastructure/Doctrine/Repository/Filter/DoctrineGenericSortApplierTest.php b/tests/Integration/DDDStarterPack/Aggregate/Infrastructure/Doctrine/Repository/Filter/DoctrineGenericSortApplierTest.php index 839c2d6..67f9879 100644 --- a/tests/Integration/DDDStarterPack/Aggregate/Infrastructure/Doctrine/Repository/Filter/DoctrineGenericSortApplierTest.php +++ b/tests/Integration/DDDStarterPack/Aggregate/Infrastructure/Doctrine/Repository/Filter/DoctrineGenericSortApplierTest.php @@ -4,7 +4,7 @@ namespace Tests\Integration\DDDStarterPack\Aggregate\Infrastructure\Doctrine\Repository\Filter; -use DDDStarterPack\Aggregate\Domain\Repository\Filter\FilterParamsBuilder; +use DDDStarterPack\Aggregate\Domain\Repository\Filter\FilterBuilder; use Doctrine\ORM\QueryBuilder; use PHPUnit\Framework\TestCase; use Tests\Support\Model\Doctrine\DoctrineSortApplier; @@ -36,7 +36,7 @@ public function apply_sorting_to_query_builder(): void (string) $this->qb->getQuery()->getDQL() ); - $filterParamsBuilder = new FilterParamsBuilder(); + $filterParamsBuilder = new FilterBuilder(); $filterParamsBuilder->addApplier(new DoctrineSortApplier()); $filterParams = $filterParamsBuilder->build(['sort_field' => 'name', 'sort_direction' => 'ASC']); @@ -70,7 +70,7 @@ public function it_should_not_apply_filter_if_sort_field_is_null(): void (string) $this->qb->getQuery()->getDQL() ); - $filterParamsBuilder = new FilterParamsBuilder(); + $filterParamsBuilder = new FilterBuilder(); $filterParamsBuilder->addApplier(new DoctrineSortApplier()); $filterParams = $filterParamsBuilder->build(['sort_field' => null, 'sort_direction' => 'ASC']); @@ -96,7 +96,7 @@ public function it_should_use_default_sort_direction_if_not_present(): void (string) $this->qb->getQuery()->getDQL() ); - $filterParamsBuilder = new FilterParamsBuilder(); + $filterParamsBuilder = new FilterBuilder(); $filterParamsBuilder->addApplier(new DoctrineSortApplier()); $filterParams = $filterParamsBuilder->build(['sort_field' => 'name']); diff --git a/tests/Support/Model/Doctrine/DoctrinePaginationApplier.php b/tests/Support/Model/Doctrine/DoctrinePaginationApplier.php index 47d3597..a866895 100644 --- a/tests/Support/Model/Doctrine/DoctrinePaginationApplier.php +++ b/tests/Support/Model/Doctrine/DoctrinePaginationApplier.php @@ -4,11 +4,11 @@ namespace Tests\Support\Model\Doctrine; -use DDDStarterPack\Aggregate\Domain\Repository\Filter\FilterParams; -use DDDStarterPack\Aggregate\Domain\Repository\Filter\FilterParamsApplier; +use DDDStarterPack\Aggregate\Domain\Repository\Filter\FilterApplier; +use DDDStarterPack\Aggregate\Domain\Repository\Filter\FilterApplierRegistry; use DDDStarterPack\Aggregate\Infrastructure\Doctrine\Repository\Filter\DoctrineGenericPaginationApplier; -class DoctrinePaginationApplier extends DoctrineGenericPaginationApplier implements FilterParamsApplier +class DoctrinePaginationApplier extends DoctrineGenericPaginationApplier implements FilterApplier { protected function pageKey(): string { @@ -20,7 +20,7 @@ protected function perPageKey(): string return 'per_page'; } - public function supports(FilterParams $filterParams): bool + public function supports(FilterApplierRegistry $filterApplierRegistry): bool { return true; } diff --git a/tests/Support/Model/Doctrine/DoctrineSortApplier.php b/tests/Support/Model/Doctrine/DoctrineSortApplier.php index 906d199..380bc6f 100644 --- a/tests/Support/Model/Doctrine/DoctrineSortApplier.php +++ b/tests/Support/Model/Doctrine/DoctrineSortApplier.php @@ -4,11 +4,11 @@ namespace Tests\Support\Model\Doctrine; -use DDDStarterPack\Aggregate\Domain\Repository\Filter\FilterParams; -use DDDStarterPack\Aggregate\Domain\Repository\Filter\FilterParamsApplier; +use DDDStarterPack\Aggregate\Domain\Repository\Filter\FilterApplier; +use DDDStarterPack\Aggregate\Domain\Repository\Filter\FilterApplierRegistry; use DDDStarterPack\Aggregate\Infrastructure\Doctrine\Repository\Filter\DoctrineGenericSortApplier; -class DoctrineSortApplier extends DoctrineGenericSortApplier implements FilterParamsApplier +class DoctrineSortApplier extends DoctrineGenericSortApplier implements FilterApplier { public function __construct() { @@ -25,7 +25,7 @@ protected function sortKey(): string return 'sort_field'; } - public function supports(FilterParams $filterParams): bool + public function supports(FilterApplierRegistry $filterApplierRegistry): bool { return true; } diff --git a/tests/Unit/DDDStarterPack/Aggregate/Domain/Repository/Filter/DummyFilterApplier.php b/tests/Unit/DDDStarterPack/Aggregate/Domain/Repository/Filter/DummyFilterApplier.php new file mode 100644 index 0000000..68e7d29 --- /dev/null +++ b/tests/Unit/DDDStarterPack/Aggregate/Domain/Repository/Filter/DummyFilterApplier.php @@ -0,0 +1,47 @@ + + */ +class DummyFilterApplier implements FilterApplier +{ + private string $key; + + public function __construct(string $key) + { + if (!$key) { + throw new InvalidArgumentException('the given key is empty'); + } + + $this->key = $key; + } + + /** + * @param DummyArrayTarget $target + * @param FilterApplierRegistry $filterApplierRegistry + */ + public function apply($target, FilterApplierRegistry $filterApplierRegistry): void + { + $target->add([ + $this->key() => $filterApplierRegistry->getFilterValueForKey($this->key()), + ]); + } + + public function key(): string + { + return $this->key; + } + + public function supports(FilterApplierRegistry $filterApplierRegistry): bool + { + return true; + } +} diff --git a/tests/Unit/DDDStarterPack/Aggregate/Domain/Repository/Filter/DummyFilterParamsApplier.php b/tests/Unit/DDDStarterPack/Aggregate/Domain/Repository/Filter/DummyFilterParamsApplier.php deleted file mode 100644 index 09a9a43..0000000 --- a/tests/Unit/DDDStarterPack/Aggregate/Domain/Repository/Filter/DummyFilterParamsApplier.php +++ /dev/null @@ -1,47 +0,0 @@ - - */ -class DummyFilterParamsApplier implements FilterParamsApplier -{ - private string $key; - - public function __construct(string $key) - { - if (!$key) { - throw new InvalidArgumentException('the given key is empty'); - } - - $this->key = $key; - } - - /** - * @param DummyArrayTarget $target - * @param FilterParams $filterParams - */ - public function apply($target, FilterParams $filterParams): void - { - $target->add([ - $this->key() => $filterParams->getFilterValueForKey($this->key()), - ]); - } - - public function key(): string - { - return $this->key; - } - - public function supports(FilterParams $filterParams): bool - { - return true; - } -} diff --git a/tests/Unit/DDDStarterPack/Aggregate/Domain/Repository/Filter/FilterParamsBuilderTest.php b/tests/Unit/DDDStarterPack/Aggregate/Domain/Repository/Filter/FilterParamsBuilderTest.php index 792aaf5..6799b79 100644 --- a/tests/Unit/DDDStarterPack/Aggregate/Domain/Repository/Filter/FilterParamsBuilderTest.php +++ b/tests/Unit/DDDStarterPack/Aggregate/Domain/Repository/Filter/FilterParamsBuilderTest.php @@ -4,7 +4,7 @@ namespace Tests\Unit\DDDStarterPack\Aggregate\Domain\Repository\Filter; -use DDDStarterPack\Aggregate\Domain\Repository\Filter\FilterParamsBuilder; +use DDDStarterPack\Aggregate\Domain\Repository\Filter\FilterBuilder; use InvalidArgumentException; use LogicException; use PHPUnit\Framework\TestCase; @@ -17,10 +17,10 @@ class FilterParamsBuilderTest extends TestCase */ public function it_should_create_a_filterparams_by_builder(): void { - $filterParamsBuilder = new FilterParamsBuilder( + $filterParamsBuilder = new FilterBuilder( [ - new DummyFilterParamsApplier('name'), - new DummyFilterParamsApplier('skills'), + new DummyFilterApplier('name'), + new DummyFilterApplier('skills'), ] ); @@ -52,10 +52,10 @@ public function it_should_throw_exception_if_two_filter_params_applier_have_same self::expectException(InvalidArgumentException::class); self::expectExceptionMessage('Applier for key \'name\' is already set'); - (new FilterParamsBuilder( + (new FilterBuilder( [ - new DummyFilterParamsApplier('name'), - new DummyFilterParamsApplier('name'), + new DummyFilterApplier('name'), + new DummyFilterApplier('name'), ] ))->build( [ @@ -74,15 +74,15 @@ public function filter_params_builder_thow_an_exception(): void $this->expectException(LogicException::class); $this->expectExceptionMessage('The builder is frozen'); - $filterParamsBuilder = new FilterParamsBuilder(); - $filterParamsBuilder->addApplier(new DummyFilterParamsApplier('name')); + $filterParamsBuilder = new FilterBuilder(); + $filterParamsBuilder->addApplier(new DummyFilterApplier('name')); $filterParamsBuilder->build([ 'name' => 'Matteo', 'skills' => ['architecture', 'programming'], ]); - $filterParamsBuilder->addApplier(new DummyFilterParamsApplier('skills')); + $filterParamsBuilder->addApplier(new DummyFilterApplier('skills')); } } diff --git a/tests/Unit/DDDStarterPack/Aggregate/Domain/Repository/Filter/FilterParamsTest.php b/tests/Unit/DDDStarterPack/Aggregate/Domain/Repository/Filter/FilterParamsTest.php index 52bc4f9..8b1a9cd 100644 --- a/tests/Unit/DDDStarterPack/Aggregate/Domain/Repository/Filter/FilterParamsTest.php +++ b/tests/Unit/DDDStarterPack/Aggregate/Domain/Repository/Filter/FilterParamsTest.php @@ -4,7 +4,7 @@ namespace Tests\Unit\DDDStarterPack\Aggregate\Domain\Repository\Filter; -use DDDStarterPack\Aggregate\Domain\Repository\Filter\FilterParams; +use DDDStarterPack\Aggregate\Domain\Repository\Filter\FilterApplierRegistry; use InvalidArgumentException; use PHPUnit\Framework\TestCase; @@ -24,11 +24,11 @@ public function it_should_throw_exception_if_two_filter_params_applier_have_same ]; $filterParamsApplyer = [ - new DummyFilterParamsApplier('name'), - new DummyFilterParamsApplier('name'), + new DummyFilterApplier('name'), + new DummyFilterApplier('name'), ]; - new FilterParams($filterParamsApplyer, $neededFilters); + new FilterApplierRegistry($filterParamsApplyer, $neededFilters); } /** @@ -44,7 +44,7 @@ public function it_should_throw_exception_if_key_does_not_exist(): void 'skills' => ['architecture', 'programming'], ]; - $filterParams = new FilterParams([], $neededFilters); + $filterParams = new FilterApplierRegistry([], $neededFilters); $filterParams->getFilterValueForKey('surname'); } @@ -58,7 +58,7 @@ public function it_should_verify_if_key_exists(): void 'name' => 'Matteo', ]; - $filterParams = new FilterParams([], $neededFilters); + $filterParams = new FilterApplierRegistry([], $neededFilters); self::assertFalse($filterParams->hasFilterWithKey('surname')); }