From 7b43403b1cef4ac9845accc037413e80571eb1f9 Mon Sep 17 00:00:00 2001 From: Alejandro Celaya Date: Tue, 3 Aug 2021 16:48:17 +0200 Subject: [PATCH] Fixed error when editing domain redirects for a new domain --- .../Domain/Repository/DomainRepository.php | 28 ++++++++----------- .../Repository/DomainRepositoryTest.php | 2 +- .../Action/Domain/DomainRedirectsAction.php | 2 +- 3 files changed, 13 insertions(+), 19 deletions(-) diff --git a/module/Core/src/Domain/Repository/DomainRepository.php b/module/Core/src/Domain/Repository/DomainRepository.php index 50033604..33538011 100644 --- a/module/Core/src/Domain/Repository/DomainRepository.php +++ b/module/Core/src/Domain/Repository/DomainRepository.php @@ -23,8 +23,14 @@ class DomainRepository extends EntitySpecificationRepository implements DomainRe */ public function findDomainsWithout(?string $excludedAuthority, ?ApiKey $apiKey = null): array { - $qb = $this->createPublicDomainsQueryBuilder(); - $qb->orderBy('d.authority', 'ASC'); + $qb = $this->createQueryBuilder('d'); + $qb->leftJoin(ShortUrl::class, 's', Join::WITH, 's.domain = d') + ->groupBy('d') + ->orderBy('d.authority', 'ASC') + ->having($qb->expr()->gt('COUNT(s.id)', '0')) + ->orHaving($qb->expr()->isNotNull('d.baseUrlRedirect')) + ->orHaving($qb->expr()->isNotNull('d.regular404Redirect')) + ->orHaving($qb->expr()->isNotNull('d.invalidShortUrlRedirect')); $specs = $this->determineExtraSpecs($excludedAuthority, $apiKey); foreach ($specs as [$alias, $spec]) { @@ -36,8 +42,9 @@ class DomainRepository extends EntitySpecificationRepository implements DomainRe public function findOneByAuthority(string $authority, ?ApiKey $apiKey = null): ?Domain { - $qb = $this->createPublicDomainsQueryBuilder(); - $qb->where($qb->expr()->eq('d.authority', ':authority')) + $qb = $this->createQueryBuilder('d'); + $qb->leftJoin(ShortUrl::class, 's', Join::WITH, 's.domain = d') + ->where($qb->expr()->eq('d.authority', ':authority')) ->setParameter('authority', $authority) ->setMaxResults(1); @@ -49,19 +56,6 @@ class DomainRepository extends EntitySpecificationRepository implements DomainRe return $qb->getQuery()->getOneOrNullResult(); } - private function createPublicDomainsQueryBuilder(): QueryBuilder - { - $qb = $this->createQueryBuilder('d'); - $qb->leftJoin(ShortUrl::class, 's', Join::WITH, 's.domain = d') - ->groupBy('d') - ->having($qb->expr()->gt('COUNT(s.id)', '0')) - ->orHaving($qb->expr()->isNotNull('d.baseUrlRedirect')) - ->orHaving($qb->expr()->isNotNull('d.regular404Redirect')) - ->orHaving($qb->expr()->isNotNull('d.invalidShortUrlRedirect')); - - return $qb; - } - private function determineExtraSpecs(?string $excludedAuthority, ?ApiKey $apiKey): iterable { if ($excludedAuthority !== null) { diff --git a/module/Core/test-db/Domain/Repository/DomainRepositoryTest.php b/module/Core/test-db/Domain/Repository/DomainRepositoryTest.php index c58edfe6..1eaf6ea9 100644 --- a/module/Core/test-db/Domain/Repository/DomainRepositoryTest.php +++ b/module/Core/test-db/Domain/Repository/DomainRepositoryTest.php @@ -74,7 +74,7 @@ class DomainRepositoryTest extends DatabaseTestCase self::assertEquals($barDomain, $this->repo->findOneByAuthority('bar.com')); self::assertEquals($detachedWithRedirects, $this->repo->findOneByAuthority('detached-with-redirects.com')); self::assertNull($this->repo->findOneByAuthority('does-not-exist.com')); - self::assertNull($this->repo->findOneByAuthority('detached.com')); + self::assertEquals($detachedDomain, $this->repo->findOneByAuthority('detached.com')); } /** @test */ diff --git a/module/Rest/src/Action/Domain/DomainRedirectsAction.php b/module/Rest/src/Action/Domain/DomainRedirectsAction.php index d9259582..ca4346f8 100644 --- a/module/Rest/src/Action/Domain/DomainRedirectsAction.php +++ b/module/Rest/src/Action/Domain/DomainRedirectsAction.php @@ -23,7 +23,7 @@ class DomainRedirectsAction extends AbstractRestAction public function handle(ServerRequestInterface $request): ResponseInterface { - // TODO Do not allow to set redirects for default domain + // TODO Do not allow to set redirects for default domain. Or do allow. Check if there could be any issue /** @var array $body */ $body = $request->getParsedBody();