refactor: move DQL in repositories

This commit is contained in:
Maël Gangloff
2025-10-21 12:52:43 +02:00
parent 1ae35231fe
commit 4facd7e951
12 changed files with 123 additions and 81 deletions

View File

@@ -2,6 +2,7 @@
namespace App\Repository;
use App\Entity\Domain;
use App\Entity\DomainEntity;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
@@ -16,6 +17,18 @@ class DomainEntityRepository extends ServiceEntityRepository
parent::__construct($registry, DomainEntity::class);
}
public function setDomainEntityAsDeleted(Domain $domain)
{
return $this->createQueryBuilder('de')
->update()
->set('de.deletedAt', ':now')
->where('de.domain = :domain')
->andWhere('de.deletedAt IS NOT NULL')
->setParameter('now', new \DateTimeImmutable())
->setParameter('domain', $domain)
->getQuery()->execute();
}
// /**
// * @return DomainEntity[] Returns an array of DomainEntity objects
// */

View File

@@ -2,6 +2,7 @@
namespace App\Repository;
use App\Entity\Domain;
use App\Entity\DomainEvent;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
@@ -16,6 +17,45 @@ class DomainEventRepository extends ServiceEntityRepository
parent::__construct($registry, DomainEvent::class);
}
public function findLastExpirationDomainEvent(Domain $domain)
{
return $this->createQueryBuilder('de')
->select()
->where('de.domain = :domain')
->andWhere('de.action = \'expiration\'')
->andWhere('de.deleted = FALSE')
->orderBy('de.date', 'DESC')
->setMaxResults(1)
->getQuery()
->setParameter('domain', $domain)
->getOneOrNullResult();
}
public function findNewDomainEvents(Domain $domain, \DateTimeImmutable $updatedAt)
{
return $this->createQueryBuilder('de')
->select()
->where('de.domain = :domain')
->andWhere('de.date > :updatedAt')
->andWhere('de.date < :now')
->setParameter('domain', $domain)
->setParameter('updatedAt', $updatedAt)
->setParameter('now', new \DateTimeImmutable())
->getQuery()->getResult();
}
public function setDomainEventAsDeleted(Domain $domain)
{
return $this->createQueryBuilder('de')
->update()
->set('de.deleted', ':deleted')
->where('de.domain = :domain')
->setParameter('deleted', true)
->setParameter('domain', $domain)
->getQuery()
->execute();
}
// /**
// * @return DomainEvent[] Returns an array of DomainEvent objects
// */

View File

@@ -3,6 +3,7 @@
namespace App\Repository;
use App\Entity\Domain;
use App\Entity\Tld;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
@@ -27,6 +28,29 @@ class DomainRepository extends ServiceEntityRepository
->getResult();
}
public function getActiveDomainCountByTld(): array
{
return $this->createQueryBuilder('d')
->select('t.tld tld')
->join('d.tld', 't')
->addSelect('COUNT(d.ldhName) AS domain')
->addGroupBy('t.tld')
->where('d.deleted = FALSE')
->orderBy('domain', 'DESC')
->setMaxResults(5)
->getQuery()->getArrayResult();
}
public function setDomainDeletedIfTldIsDeleted()
{
return $this->createQueryBuilder('d')
->update()
->set('d.deleted', ':deleted')
->where('d.tld IN (SELECT t FROM '.Tld::class.' t WHERE t.deletedAt IS NOT NULL)')
->setParameter('deleted', true)
->getQuery()->execute();
}
// /**
// * @return Domain[] Returns an array of Domain objects
// */

View File

@@ -2,6 +2,7 @@
namespace App\Repository;
use App\Entity\Domain;
use App\Entity\DomainStatus;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
@@ -16,6 +17,19 @@ class DomainStatusRepository extends ServiceEntityRepository
parent::__construct($registry, DomainStatus::class);
}
public function findNewDomainStatus(Domain $domain, \DateTimeImmutable $updatedAt)
{
return $this->createQueryBuilder('ds')
->select()
->where('ds.domain = :domain')
->andWhere('ds.date = :date')
->orderBy('ds.createdAt', 'DESC')
->setParameter('domain', $domain)
->setParameter('date', $updatedAt)
->getQuery()
->getOneOrNullResult();
}
// /**
// * @return DomainStatus[] Returns an array of DomainStatus objects
// */

View File

@@ -28,6 +28,16 @@ class TldRepository extends ServiceEntityRepository
->getResult();
}
public function setAllTldAsDeleted()
{
return $this->createQueryBuilder('t')
->update()
->set('t.deletedAt', 'COALESCE(t.removalDate, CURRENT_TIMESTAMP())')
->where('t.tld != :dot')
->setParameter('dot', '.')
->getQuery()->execute();
}
// /**
// * @return Tld[] Returns an array of Tld objects
// */

View File

@@ -16,6 +16,15 @@ class WatchListRepository extends ServiceEntityRepository
parent::__construct($registry, WatchList::class);
}
public function getTrackedDomainCount()
{
return $this->createQueryBuilder('w')
->select('COUNT(DISTINCT d.ldhName)')
->join('w.domains', 'd')
->where('d.deleted = FALSE')
->getQuery()->getSingleScalarResult();
}
// /**
// * @return WatchList[] Returns an array of WatchList objects
// */