refactor: optimize getTrackedDomains

This commit is contained in:
Maël Gangloff 2025-10-25 13:13:28 +02:00
parent 2d07dce1ae
commit 4c3820d70e
No known key found for this signature in database
GPG Key ID: 11FDC81C24A7F629
2 changed files with 24 additions and 16 deletions

View File

@ -7,7 +7,7 @@ use App\Entity\DomainEvent;
use App\Entity\DomainStatus; use App\Entity\DomainStatus;
use App\Entity\User; use App\Entity\User;
use App\Entity\WatchList; use App\Entity\WatchList;
use App\Repository\DomainEventRepository; use App\Repository\DomainRepository;
use App\Repository\WatchListRepository; use App\Repository\WatchListRepository;
use App\Service\CalendarService; use App\Service\CalendarService;
use App\Service\RDAPService; use App\Service\RDAPService;
@ -30,8 +30,9 @@ class WatchListController extends AbstractController
{ {
public function __construct( public function __construct(
private readonly WatchListRepository $watchListRepository, private readonly WatchListRepository $watchListRepository,
private readonly DomainEventRepository $domainEventRepository, private readonly RDAPService $RDAPService,
private readonly RDAPService $RDAPService, private readonly CalendarService $calendarService, private readonly CalendarService $calendarService,
private readonly DomainRepository $domainRepository,
) { ) {
} }
@ -107,19 +108,9 @@ class WatchListController extends AbstractController
/** @var User $user */ /** @var User $user */
$user = $this->getUser(); $user = $this->getUser();
$domains = []; $domains = $this->domainRepository->getMyTrackedDomains($user);
/** @var WatchList $watchList */ foreach ($domains as $domain) {
foreach ($user->getWatchLists()->getIterator() as $watchList) { $domain->setExpiresInDays($this->RDAPService->getExpiresInDays($domain));
/** @var Domain $domain */
foreach ($watchList->getDomains()->getIterator() as $domain) {
/** @var DomainEvent|null $exp */
$exp = $this->domainEventRepository->findLastDomainEvent($domain, 'expiration');
if (!$domain->getDeleted() && null !== $exp && !in_array($domain, $domains)) {
$domain->setExpiresInDays($this->RDAPService->getExpiresInDays($domain));
$domains[] = $domain;
}
}
} }
usort($domains, fn (Domain $d1, Domain $d2) => $d1->getExpiresInDays() - $d2->getExpiresInDays()); usort($domains, fn (Domain $d1, Domain $d2) => $d1->getExpiresInDays() - $d2->getExpiresInDays());

View File

@ -4,6 +4,7 @@ namespace App\Repository;
use App\Entity\Domain; use App\Entity\Domain;
use App\Entity\Tld; use App\Entity\Tld;
use App\Entity\User;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry; use Doctrine\Persistence\ManagerRegistry;
@ -51,6 +52,22 @@ class DomainRepository extends ServiceEntityRepository
->getQuery()->execute(); ->getQuery()->execute();
} }
public function getMyTrackedDomains(User $user): array
{
return $this->createQueryBuilder('d')
->select('d')
->distinct()
->join('d.watchLists', 'w')
->join('d.events', 'de')
->where('w.user = :user')
->andWhere('d.deleted = false')
->andWhere("de.action = 'expiration'")
->andWhere('de.deleted = false')
->getQuery()
->setParameter('user', $user)
->execute();
}
// /** // /**
// * @return Domain[] Returns an array of Domain objects // * @return Domain[] Returns an array of Domain objects
// */ // */