From 1498b72966f976a0ba2c72000c6fba7236cf26cd Mon Sep 17 00:00:00 2001 From: Alejandro Celaya <alejandrocelaya@gmail.com> Date: Fri, 26 Feb 2021 20:01:16 +0100 Subject: [PATCH] Updated to happyr/doctrine-specification 2, with some fixes --- composer.json | 2 +- config/autoload/entity-manager.global.php | 2 +- module/Core/src/Domain/Repository/DomainRepository.php | 2 +- .../src/Domain/Repository/DomainRepositoryInterface.php | 2 +- module/Core/src/Repository/ShortUrlRepository.php | 2 +- .../Core/src/Repository/ShortUrlRepositoryInterface.php | 2 +- module/Core/src/Repository/TagRepository.php | 2 +- module/Core/src/Repository/TagRepositoryInterface.php | 2 +- module/Core/src/Repository/VisitRepository.php | 2 +- module/Core/src/Repository/VisitRepositoryInterface.php | 2 +- module/Core/src/ShortUrl/Spec/BelongsToApiKey.php | 6 +++--- module/Core/src/ShortUrl/Spec/BelongsToApiKeyInlined.php | 8 ++------ module/Core/src/ShortUrl/Spec/BelongsToDomain.php | 6 +++--- module/Core/src/ShortUrl/Spec/BelongsToDomainInlined.php | 8 ++------ module/Core/src/Spec/InDateRange.php | 2 +- module/Core/src/Tag/Spec/CountTagsWithName.php | 2 +- module/Core/src/Visit/Spec/CountOfOrphanVisits.php | 2 +- module/Core/src/Visit/Spec/CountOfShortUrlVisits.php | 2 +- module/Rest/src/ApiKey/Role.php | 5 +++-- .../Rest/src/ApiKey/Spec/WithApiKeySpecsEnsuringJoin.php | 2 +- 20 files changed, 28 insertions(+), 35 deletions(-) diff --git a/composer.json b/composer.json index a22c26ae..d544ac41 100644 --- a/composer.json +++ b/composer.json @@ -24,7 +24,7 @@ "endroid/qr-code": "dev-master#0f1613a as 3.10", "geoip2/geoip2": "^2.9", "guzzlehttp/guzzle": "^7.0", - "happyr/doctrine-specification": "2.0.x-dev#cb116d3 as 2.0", + "happyr/doctrine-specification": "^2.0", "laminas/laminas-config": "^3.3", "laminas/laminas-config-aggregator": "^1.1", "laminas/laminas-diactoros": "^2.1.3", diff --git a/config/autoload/entity-manager.global.php b/config/autoload/entity-manager.global.php index 639df7ec..c3d2ab83 100644 --- a/config/autoload/entity-manager.global.php +++ b/config/autoload/entity-manager.global.php @@ -4,7 +4,7 @@ declare(strict_types=1); namespace Shlinkio\Shlink\Common; -use Happyr\DoctrineSpecification\EntitySpecificationRepository; +use Happyr\DoctrineSpecification\Repository\EntitySpecificationRepository; return [ diff --git a/module/Core/src/Domain/Repository/DomainRepository.php b/module/Core/src/Domain/Repository/DomainRepository.php index f2152fbe..2e4f3bb2 100644 --- a/module/Core/src/Domain/Repository/DomainRepository.php +++ b/module/Core/src/Domain/Repository/DomainRepository.php @@ -5,7 +5,7 @@ declare(strict_types=1); namespace Shlinkio\Shlink\Core\Domain\Repository; use Doctrine\ORM\Query\Expr\Join; -use Happyr\DoctrineSpecification\EntitySpecificationRepository; +use Happyr\DoctrineSpecification\Repository\EntitySpecificationRepository; use Shlinkio\Shlink\Core\Entity\Domain; use Shlinkio\Shlink\Core\Entity\ShortUrl; use Shlinkio\Shlink\Rest\Entity\ApiKey; diff --git a/module/Core/src/Domain/Repository/DomainRepositoryInterface.php b/module/Core/src/Domain/Repository/DomainRepositoryInterface.php index 13917dc6..1d201520 100644 --- a/module/Core/src/Domain/Repository/DomainRepositoryInterface.php +++ b/module/Core/src/Domain/Repository/DomainRepositoryInterface.php @@ -5,7 +5,7 @@ declare(strict_types=1); namespace Shlinkio\Shlink\Core\Domain\Repository; use Doctrine\Persistence\ObjectRepository; -use Happyr\DoctrineSpecification\EntitySpecificationRepositoryInterface; +use Happyr\DoctrineSpecification\Repository\EntitySpecificationRepositoryInterface; use Shlinkio\Shlink\Core\Entity\Domain; use Shlinkio\Shlink\Rest\Entity\ApiKey; diff --git a/module/Core/src/Repository/ShortUrlRepository.php b/module/Core/src/Repository/ShortUrlRepository.php index f7a089b7..24b20a38 100644 --- a/module/Core/src/Repository/ShortUrlRepository.php +++ b/module/Core/src/Repository/ShortUrlRepository.php @@ -6,7 +6,7 @@ namespace Shlinkio\Shlink\Core\Repository; use Doctrine\ORM\Query\Expr\Join; use Doctrine\ORM\QueryBuilder; -use Happyr\DoctrineSpecification\EntitySpecificationRepository; +use Happyr\DoctrineSpecification\Repository\EntitySpecificationRepository; use Happyr\DoctrineSpecification\Specification\Specification; use Shlinkio\Shlink\Common\Doctrine\Type\ChronosDateTimeType; use Shlinkio\Shlink\Common\Util\DateRange; diff --git a/module/Core/src/Repository/ShortUrlRepositoryInterface.php b/module/Core/src/Repository/ShortUrlRepositoryInterface.php index e5662e20..ca04ffda 100644 --- a/module/Core/src/Repository/ShortUrlRepositoryInterface.php +++ b/module/Core/src/Repository/ShortUrlRepositoryInterface.php @@ -5,7 +5,7 @@ declare(strict_types=1); namespace Shlinkio\Shlink\Core\Repository; use Doctrine\Persistence\ObjectRepository; -use Happyr\DoctrineSpecification\EntitySpecificationRepositoryInterface; +use Happyr\DoctrineSpecification\Repository\EntitySpecificationRepositoryInterface; use Happyr\DoctrineSpecification\Specification\Specification; use Shlinkio\Shlink\Common\Util\DateRange; use Shlinkio\Shlink\Core\Entity\ShortUrl; diff --git a/module/Core/src/Repository/TagRepository.php b/module/Core/src/Repository/TagRepository.php index dd15c292..d5a33c8b 100644 --- a/module/Core/src/Repository/TagRepository.php +++ b/module/Core/src/Repository/TagRepository.php @@ -4,7 +4,7 @@ declare(strict_types=1); namespace Shlinkio\Shlink\Core\Repository; -use Happyr\DoctrineSpecification\EntitySpecificationRepository; +use Happyr\DoctrineSpecification\Repository\EntitySpecificationRepository; use Happyr\DoctrineSpecification\Spec; use Happyr\DoctrineSpecification\Specification\Specification; use Shlinkio\Shlink\Core\Entity\Tag; diff --git a/module/Core/src/Repository/TagRepositoryInterface.php b/module/Core/src/Repository/TagRepositoryInterface.php index 86898ed1..97c308df 100644 --- a/module/Core/src/Repository/TagRepositoryInterface.php +++ b/module/Core/src/Repository/TagRepositoryInterface.php @@ -5,7 +5,7 @@ declare(strict_types=1); namespace Shlinkio\Shlink\Core\Repository; use Doctrine\Persistence\ObjectRepository; -use Happyr\DoctrineSpecification\EntitySpecificationRepositoryInterface; +use Happyr\DoctrineSpecification\Repository\EntitySpecificationRepositoryInterface; use Happyr\DoctrineSpecification\Specification\Specification; use Shlinkio\Shlink\Core\Tag\Model\TagInfo; use Shlinkio\Shlink\Rest\Entity\ApiKey; diff --git a/module/Core/src/Repository/VisitRepository.php b/module/Core/src/Repository/VisitRepository.php index b869093e..cd51f60d 100644 --- a/module/Core/src/Repository/VisitRepository.php +++ b/module/Core/src/Repository/VisitRepository.php @@ -6,7 +6,7 @@ namespace Shlinkio\Shlink\Core\Repository; use Doctrine\ORM\Query\ResultSetMappingBuilder; use Doctrine\ORM\QueryBuilder; -use Happyr\DoctrineSpecification\EntitySpecificationRepository; +use Happyr\DoctrineSpecification\Repository\EntitySpecificationRepository; use Happyr\DoctrineSpecification\Specification\Specification; use Shlinkio\Shlink\Common\Util\DateRange; use Shlinkio\Shlink\Core\Entity\ShortUrl; diff --git a/module/Core/src/Repository/VisitRepositoryInterface.php b/module/Core/src/Repository/VisitRepositoryInterface.php index 3ecf0bca..96fb21ee 100644 --- a/module/Core/src/Repository/VisitRepositoryInterface.php +++ b/module/Core/src/Repository/VisitRepositoryInterface.php @@ -5,7 +5,7 @@ declare(strict_types=1); namespace Shlinkio\Shlink\Core\Repository; use Doctrine\Persistence\ObjectRepository; -use Happyr\DoctrineSpecification\EntitySpecificationRepositoryInterface; +use Happyr\DoctrineSpecification\Repository\EntitySpecificationRepositoryInterface; use Happyr\DoctrineSpecification\Specification\Specification; use Shlinkio\Shlink\Common\Util\DateRange; use Shlinkio\Shlink\Core\Entity\Visit; diff --git a/module/Core/src/ShortUrl/Spec/BelongsToApiKey.php b/module/Core/src/ShortUrl/Spec/BelongsToApiKey.php index 9e094b90..ac20d0db 100644 --- a/module/Core/src/ShortUrl/Spec/BelongsToApiKey.php +++ b/module/Core/src/ShortUrl/Spec/BelongsToApiKey.php @@ -4,20 +4,20 @@ declare(strict_types=1); namespace Shlinkio\Shlink\Core\ShortUrl\Spec; -use Happyr\DoctrineSpecification\BaseSpecification; use Happyr\DoctrineSpecification\Filter\Filter; use Happyr\DoctrineSpecification\Spec; +use Happyr\DoctrineSpecification\Specification\BaseSpecification; use Shlinkio\Shlink\Rest\Entity\ApiKey; class BelongsToApiKey extends BaseSpecification { private ApiKey $apiKey; - private string $dqlAlias; + private ?string $dqlAlias; public function __construct(ApiKey $apiKey, ?string $dqlAlias = null) { $this->apiKey = $apiKey; - $this->dqlAlias = $dqlAlias ?? 's'; + $this->dqlAlias = $dqlAlias; parent::__construct($this->dqlAlias); } diff --git a/module/Core/src/ShortUrl/Spec/BelongsToApiKeyInlined.php b/module/Core/src/ShortUrl/Spec/BelongsToApiKeyInlined.php index 197031f3..579407cd 100644 --- a/module/Core/src/ShortUrl/Spec/BelongsToApiKeyInlined.php +++ b/module/Core/src/ShortUrl/Spec/BelongsToApiKeyInlined.php @@ -5,10 +5,10 @@ declare(strict_types=1); namespace Shlinkio\Shlink\Core\ShortUrl\Spec; use Doctrine\ORM\QueryBuilder; -use Happyr\DoctrineSpecification\Specification\Specification; +use Happyr\DoctrineSpecification\Filter\Filter; use Shlinkio\Shlink\Rest\Entity\ApiKey; -class BelongsToApiKeyInlined implements Specification +class BelongsToApiKeyInlined implements Filter { private ApiKey $apiKey; @@ -22,8 +22,4 @@ class BelongsToApiKeyInlined implements Specification // Parameters in this query need to be inlined, not bound, as we need to use it as sub-query later return (string) $qb->expr()->eq('s.authorApiKey', '\'' . $this->apiKey->getId() . '\''); } - - public function modify(QueryBuilder $qb, string $dqlAlias): void - { - } } diff --git a/module/Core/src/ShortUrl/Spec/BelongsToDomain.php b/module/Core/src/ShortUrl/Spec/BelongsToDomain.php index 81b4388a..59898476 100644 --- a/module/Core/src/ShortUrl/Spec/BelongsToDomain.php +++ b/module/Core/src/ShortUrl/Spec/BelongsToDomain.php @@ -4,19 +4,19 @@ declare(strict_types=1); namespace Shlinkio\Shlink\Core\ShortUrl\Spec; -use Happyr\DoctrineSpecification\BaseSpecification; use Happyr\DoctrineSpecification\Filter\Filter; use Happyr\DoctrineSpecification\Spec; +use Happyr\DoctrineSpecification\Specification\BaseSpecification; class BelongsToDomain extends BaseSpecification { private string $domainId; - private string $dqlAlias; + private ?string $dqlAlias; public function __construct(string $domainId, ?string $dqlAlias = null) { $this->domainId = $domainId; - $this->dqlAlias = $dqlAlias ?? 's'; + $this->dqlAlias = $dqlAlias; parent::__construct($this->dqlAlias); } diff --git a/module/Core/src/ShortUrl/Spec/BelongsToDomainInlined.php b/module/Core/src/ShortUrl/Spec/BelongsToDomainInlined.php index a8ef527e..cb69a359 100644 --- a/module/Core/src/ShortUrl/Spec/BelongsToDomainInlined.php +++ b/module/Core/src/ShortUrl/Spec/BelongsToDomainInlined.php @@ -5,9 +5,9 @@ declare(strict_types=1); namespace Shlinkio\Shlink\Core\ShortUrl\Spec; use Doctrine\ORM\QueryBuilder; -use Happyr\DoctrineSpecification\Specification\Specification; +use Happyr\DoctrineSpecification\Filter\Filter; -class BelongsToDomainInlined implements Specification +class BelongsToDomainInlined implements Filter { private string $domainId; @@ -21,8 +21,4 @@ class BelongsToDomainInlined implements Specification // Parameters in this query need to be inlined, not bound, as we need to use it as sub-query later return (string) $qb->expr()->eq('s.domain', '\'' . $this->domainId . '\''); } - - public function modify(QueryBuilder $qb, string $dqlAlias): void - { - } } diff --git a/module/Core/src/Spec/InDateRange.php b/module/Core/src/Spec/InDateRange.php index 44944aed..953ed9f2 100644 --- a/module/Core/src/Spec/InDateRange.php +++ b/module/Core/src/Spec/InDateRange.php @@ -4,8 +4,8 @@ declare(strict_types=1); namespace Shlinkio\Shlink\Core\Spec; -use Happyr\DoctrineSpecification\BaseSpecification; use Happyr\DoctrineSpecification\Spec; +use Happyr\DoctrineSpecification\Specification\BaseSpecification; use Happyr\DoctrineSpecification\Specification\Specification; use Shlinkio\Shlink\Common\Util\DateRange; diff --git a/module/Core/src/Tag/Spec/CountTagsWithName.php b/module/Core/src/Tag/Spec/CountTagsWithName.php index a3f90a78..8dd3e44d 100644 --- a/module/Core/src/Tag/Spec/CountTagsWithName.php +++ b/module/Core/src/Tag/Spec/CountTagsWithName.php @@ -4,8 +4,8 @@ declare(strict_types=1); namespace Shlinkio\Shlink\Core\Tag\Spec; -use Happyr\DoctrineSpecification\BaseSpecification; use Happyr\DoctrineSpecification\Spec; +use Happyr\DoctrineSpecification\Specification\BaseSpecification; use Happyr\DoctrineSpecification\Specification\Specification; class CountTagsWithName extends BaseSpecification diff --git a/module/Core/src/Visit/Spec/CountOfOrphanVisits.php b/module/Core/src/Visit/Spec/CountOfOrphanVisits.php index fb8ee3bd..97712944 100644 --- a/module/Core/src/Visit/Spec/CountOfOrphanVisits.php +++ b/module/Core/src/Visit/Spec/CountOfOrphanVisits.php @@ -4,8 +4,8 @@ declare(strict_types=1); namespace Shlinkio\Shlink\Core\Visit\Spec; -use Happyr\DoctrineSpecification\BaseSpecification; use Happyr\DoctrineSpecification\Spec; +use Happyr\DoctrineSpecification\Specification\BaseSpecification; use Happyr\DoctrineSpecification\Specification\Specification; use Shlinkio\Shlink\Common\Util\DateRange; use Shlinkio\Shlink\Core\Spec\InDateRange; diff --git a/module/Core/src/Visit/Spec/CountOfShortUrlVisits.php b/module/Core/src/Visit/Spec/CountOfShortUrlVisits.php index 6a125ee9..ea4a4800 100644 --- a/module/Core/src/Visit/Spec/CountOfShortUrlVisits.php +++ b/module/Core/src/Visit/Spec/CountOfShortUrlVisits.php @@ -4,8 +4,8 @@ declare(strict_types=1); namespace Shlinkio\Shlink\Core\Visit\Spec; -use Happyr\DoctrineSpecification\BaseSpecification; use Happyr\DoctrineSpecification\Spec; +use Happyr\DoctrineSpecification\Specification\BaseSpecification; use Happyr\DoctrineSpecification\Specification\Specification; use Shlinkio\Shlink\Rest\ApiKey\Spec\WithApiKeySpecsEnsuringJoin; use Shlinkio\Shlink\Rest\Entity\ApiKey; diff --git a/module/Rest/src/ApiKey/Role.php b/module/Rest/src/ApiKey/Role.php index ff3211ba..93ac717a 100644 --- a/module/Rest/src/ApiKey/Role.php +++ b/module/Rest/src/ApiKey/Role.php @@ -24,12 +24,13 @@ class Role public static function toSpec(ApiKeyRole $role, bool $inlined): Specification { if ($role->name() === self::AUTHORED_SHORT_URLS) { - return $inlined ? new BelongsToApiKeyInlined($role->apiKey()) : new BelongsToApiKey($role->apiKey()); + $apiKey = $role->apiKey(); + return $inlined ? Spec::andX(new BelongsToApiKeyInlined($apiKey)) : new BelongsToApiKey($apiKey); } if ($role->name() === self::DOMAIN_SPECIFIC) { $domainId = self::domainIdFromMeta($role->meta()); - return $inlined ? new BelongsToDomainInlined($domainId) : new BelongsToDomain($domainId); + return $inlined ? Spec::andX(new BelongsToDomainInlined($domainId)) : new BelongsToDomain($domainId); } return Spec::andX(); diff --git a/module/Rest/src/ApiKey/Spec/WithApiKeySpecsEnsuringJoin.php b/module/Rest/src/ApiKey/Spec/WithApiKeySpecsEnsuringJoin.php index 64359d15..e05dca41 100644 --- a/module/Rest/src/ApiKey/Spec/WithApiKeySpecsEnsuringJoin.php +++ b/module/Rest/src/ApiKey/Spec/WithApiKeySpecsEnsuringJoin.php @@ -4,8 +4,8 @@ declare(strict_types=1); namespace Shlinkio\Shlink\Rest\ApiKey\Spec; -use Happyr\DoctrineSpecification\BaseSpecification; use Happyr\DoctrineSpecification\Spec; +use Happyr\DoctrineSpecification\Specification\BaseSpecification; use Happyr\DoctrineSpecification\Specification\Specification; use Shlinkio\Shlink\Rest\Entity\ApiKey;