diff --git a/composer.json b/composer.json index e647e58c..2926a1af 100644 --- a/composer.json +++ b/composer.json @@ -47,7 +47,7 @@ "pugx/shortid-php": "^1.0", "ramsey/uuid": "^4.2", "rlanvin/php-ip": "dev-master#6b3a785 as 3.0", - "shlinkio/shlink-common": "dev-main#a6cbcb6 as 4.2", + "shlinkio/shlink-common": "dev-main#c2e3442 as 4.2", "shlinkio/shlink-config": "^1.4", "shlinkio/shlink-event-dispatcher": "dev-main#3925299 as 2.3", "shlinkio/shlink-importer": "dev-main#d099072 as 2.5", diff --git a/module/CLI/src/Command/ShortUrl/ListShortUrlsCommand.php b/module/CLI/src/Command/ShortUrl/ListShortUrlsCommand.php index 53e47d3c..cbc6e3ee 100644 --- a/module/CLI/src/Command/ShortUrl/ListShortUrlsCommand.php +++ b/module/CLI/src/Command/ShortUrl/ListShortUrlsCommand.php @@ -131,7 +131,7 @@ class ListShortUrlsCommand extends AbstractWithDateRangeCommand ]; if ($all) { - $data[ShortUrlsParamsInputFilter::ITEMS_PER_PAGE] = -1; + $data[ShortUrlsParamsInputFilter::ITEMS_PER_PAGE] = Paginator::ALL_ITEMS; } do { diff --git a/module/CLI/test/Command/ShortUrl/ListShortUrlsCommandTest.php b/module/CLI/test/Command/ShortUrl/ListShortUrlsCommandTest.php index 8150d0c8..4a974d73 100644 --- a/module/CLI/test/Command/ShortUrl/ListShortUrlsCommandTest.php +++ b/module/CLI/test/Command/ShortUrl/ListShortUrlsCommandTest.php @@ -271,7 +271,7 @@ class ListShortUrlsCommandTest extends TestCase 'startDate' => null, 'endDate' => null, 'orderBy' => null, - 'itemsPerPage' => -1, + 'itemsPerPage' => Paginator::ALL_ITEMS, ]))->willReturn(new Paginator(new ArrayAdapter([]))); $this->commandTester->execute(['--all' => true]); diff --git a/module/Core/src/Model/VisitsParams.php b/module/Core/src/Model/VisitsParams.php index ed98d4d2..dd5a656d 100644 --- a/module/Core/src/Model/VisitsParams.php +++ b/module/Core/src/Model/VisitsParams.php @@ -4,6 +4,7 @@ declare(strict_types=1); namespace Shlinkio\Shlink\Core\Model; +use Shlinkio\Shlink\Common\Paginator\Paginator; use Shlinkio\Shlink\Common\Util\DateRange; use function Shlinkio\Shlink\Core\parseDateRangeFromQuery; @@ -11,7 +12,6 @@ use function Shlinkio\Shlink\Core\parseDateRangeFromQuery; final class VisitsParams { private const FIRST_PAGE = 1; - private const ALL_ITEMS = -1; private DateRange $dateRange; private int $page; @@ -36,10 +36,10 @@ final class VisitsParams private function determineItemsPerPage(?int $itemsPerPage): int { if ($itemsPerPage !== null && $itemsPerPage < 0) { - return self::ALL_ITEMS; + return Paginator::ALL_ITEMS; } - return $itemsPerPage ?? self::ALL_ITEMS; + return $itemsPerPage ?? Paginator::ALL_ITEMS; } public static function fromRawData(array $query): self diff --git a/module/Core/src/Repository/VisitRepository.php b/module/Core/src/Repository/VisitRepository.php index 0fe539af..5c39c21e 100644 --- a/module/Core/src/Repository/VisitRepository.php +++ b/module/Core/src/Repository/VisitRepository.php @@ -226,8 +226,6 @@ class VisitRepository extends EntitySpecificationRepository implements VisitRepo 'id' => 'visit_location_id', ]); - $query = $this->getEntityManager()->createNativeQuery($nativeQb->getSQL(), $rsm); - - return $query->getResult(); + return $this->getEntityManager()->createNativeQuery($nativeQb->getSQL(), $rsm)->getResult(); } } diff --git a/module/Core/src/Validation/ShortUrlsParamsInputFilter.php b/module/Core/src/Validation/ShortUrlsParamsInputFilter.php index 871995dd..c62845d4 100644 --- a/module/Core/src/Validation/ShortUrlsParamsInputFilter.php +++ b/module/Core/src/Validation/ShortUrlsParamsInputFilter.php @@ -5,6 +5,7 @@ declare(strict_types=1); namespace Shlinkio\Shlink\Core\Validation; use Laminas\InputFilter\InputFilter; +use Shlinkio\Shlink\Common\Paginator\Paginator; use Shlinkio\Shlink\Common\Validation; class ShortUrlsParamsInputFilter extends InputFilter @@ -32,7 +33,7 @@ class ShortUrlsParamsInputFilter extends InputFilter $this->add($this->createInput(self::SEARCH_TERM, false)); $this->add($this->createNumericInput(self::PAGE, false)); - $this->add($this->createNumericInput(self::ITEMS_PER_PAGE, false, -1)); + $this->add($this->createNumericInput(self::ITEMS_PER_PAGE, false, Paginator::ALL_ITEMS)); $this->add($this->createTagsInput(self::TAGS, false)); } diff --git a/module/Rest/test-api/Action/OrphanVisitsTest.php b/module/Rest/test-api/Action/OrphanVisitsTest.php index 21f4cae1..a37193da 100644 --- a/module/Rest/test-api/Action/OrphanVisitsTest.php +++ b/module/Rest/test-api/Action/OrphanVisitsTest.php @@ -5,6 +5,7 @@ declare(strict_types=1); namespace ShlinkioApiTest\Shlink\Rest\Action; use GuzzleHttp\RequestOptions; +use Shlinkio\Shlink\Common\Paginator\Paginator; use Shlinkio\Shlink\TestUtils\ApiTest\ApiTestCase; class OrphanVisitsTest extends ApiTestCase @@ -51,7 +52,7 @@ class OrphanVisitsTest extends ApiTestCase $payload = $this->getJsonResponsePayload($resp); $visits = $payload['visits']['data'] ?? []; - self::assertEquals($totalItems, $payload['visits']['pagination']['totalItems'] ?? -1); + self::assertEquals($totalItems, $payload['visits']['pagination']['totalItems'] ?? Paginator::ALL_ITEMS); self::assertCount($expectedAmount, $visits); self::assertEquals($expectedVisits, $visits); } diff --git a/module/Rest/test-api/Action/ShortUrlVisitsTest.php b/module/Rest/test-api/Action/ShortUrlVisitsTest.php index 327c7c05..a9e571da 100644 --- a/module/Rest/test-api/Action/ShortUrlVisitsTest.php +++ b/module/Rest/test-api/Action/ShortUrlVisitsTest.php @@ -6,6 +6,7 @@ namespace ShlinkioApiTest\Shlink\Rest\Action; use GuzzleHttp\Psr7\Query; use Laminas\Diactoros\Uri; +use Shlinkio\Shlink\Common\Paginator\Paginator; use Shlinkio\Shlink\TestUtils\ApiTest\ApiTestCase; use ShlinkioApiTest\Shlink\Rest\Utils\NotFoundUrlHelpersTrait; @@ -58,7 +59,10 @@ class ShortUrlVisitsTest extends ApiTestCase $resp = $this->callApiWithKey(self::METHOD_GET, (string) $url); $payload = $this->getJsonResponsePayload($resp); - self::assertEquals($expectedAmountOfVisits, $payload['visits']['pagination']['totalItems'] ?? -1); + self::assertEquals( + $expectedAmountOfVisits, + $payload['visits']['pagination']['totalItems'] ?? Paginator::ALL_ITEMS, + ); self::assertCount($expectedAmountOfVisits, $payload['visits']['data'] ?? []); } @@ -84,7 +88,10 @@ class ShortUrlVisitsTest extends ApiTestCase $resp = $this->callApiWithKey(self::METHOD_GET, (string) $url); $payload = $this->getJsonResponsePayload($resp); - self::assertEquals($expectedAmountOfVisits, $payload['visits']['pagination']['totalItems'] ?? -1); + self::assertEquals( + $expectedAmountOfVisits, + $payload['visits']['pagination']['totalItems'] ?? Paginator::ALL_ITEMS, + ); self::assertCount($expectedAmountOfVisits, $payload['visits']['data'] ?? []); } diff --git a/phpstan.neon b/phpstan.neon index bf3afc8e..0a2433e3 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -9,3 +9,6 @@ parameters: doctrine: repositoryClass: Happyr\DoctrineSpecification\Repository\EntitySpecificationRepository objectManagerLoader: 'config/entity-manager.php' + ignoreErrors: + - '#should return int<0, max> but returns int#' + - '#expects -1|int<1, max>, int given#'