Skip to content

Commit

Permalink
feat: adds ability to get non-paginated data
Browse files Browse the repository at this point in the history
  • Loading branch information
matiux committed Jul 29, 2022
1 parent 2862ef3 commit adca721
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 9 deletions.
Expand Up @@ -9,9 +9,42 @@
use Doctrine\ORM\QueryBuilder;
use Webmozart\Assert\Assert;

/**
* @template T
*/
abstract class DoctrineFilterParamsRepository extends DoctrineRepository
{
protected function doByFilterParams(FilterParams $filterParams): Paginator
/**
* @param FilterParams $filterParams
*
* @return Paginator<T>
*/
protected function doByFilterParamsWithPagination(FilterParams $filterParams): Paginator
{
$qb = $this->createQuery($filterParams);

[$offset, $limit] = $this->calculatePagination($filterParams, $qb);

return $this->createPaginator($qb, $offset, $limit);
}

/**
* @param FilterParams $filterParams
*
* @return T[]
*/
protected function doByFilterParams(FilterParams $filterParams): array
{
$qb = $this->createQuery($filterParams);

$results = $qb->getQuery()->getResult();

Assert::isArray($results);

return $results;
}

private function createQuery(FilterParams $filterParams): QueryBuilder
{
$qb = $this->em->createQueryBuilder();

Expand All @@ -20,9 +53,7 @@ protected function doByFilterParams(FilterParams $filterParams): Paginator

$filterParams->applyToTarget($qb);

[$offset, $limit] = $this->calculatePagination($filterParams, $qb);

return $this->createPaginator($qb, $offset, $limit);
return $qb;
}

/**
Expand Down Expand Up @@ -57,7 +88,7 @@ protected function calculatePagination(FilterParams $filterParams, QueryBuilder
* @param int $offset
* @param int $limit
*
* @return Paginator
* @return Paginator<T>
*/
abstract protected function createPaginator(QueryBuilder $qb, int $offset, int $limit): Paginator;

Expand Down
Expand Up @@ -61,16 +61,22 @@ public function it_should_use_filterparams_in_repository(): void

$filterParams = $filterParamsBuilder->build(['sort_field' => 'name', 'sort_direction' => 'DESC', 'page' => 2, 'per_page' => 2]);

$items = $this->repository->byFilterParams($filterParams);
$items = $this->repository->byFilterParamsWithPagination($filterParams);

self::assertInstanceOf(Paginator::class, $items);
self::assertCount(1, $items);
self::assertSame($p1, $items->current());

$person = $items->current();
$items = $this->repository->byFilterParams($filterParams);

self::assertSame($p1, $person);
self::assertCount(1, $items);
self::assertSame($p1, $items[0]);
}
}

/**
* @extends DoctrineFilterParamsRepository<Person>
*/
class MyFilterParamsRepository extends DoctrineFilterParamsRepository
{
public function aggiungi(Person $person): void
Expand All @@ -79,7 +85,12 @@ public function aggiungi(Person $person): void
$this->em->flush();
}

public function byFilterParams(FilterParams $filterParams): Paginator
public function byFilterParamsWithPagination(FilterParams $filterParams): Paginator
{
return $this->doByFilterParamsWithPagination($filterParams);
}

public function byFilterParams(FilterParams $filterParams): array
{
return $this->doByFilterParams($filterParams);
}
Expand Down

0 comments on commit adca721

Please sign in to comment.