- MonitoringSchedule : supprimer la date passée au message (était évaluée une
seule fois au démarrage du container, rendant la requête caduque après le
premier cycle)
- CheckMonitoredMangasHandler : calculer `since` dynamiquement à l'exécution
(`new \DateTimeImmutable('-2 hours')`) plutôt que de dépendre du message
- AutoScrapingListener : corriger le TypeError silencieux — créer un ScrapingJob
avant d'appeler ScrapeChapterHandler (paramètre jobId manquant)
Ajoute les tests unitaires CheckMonitoredMangasHandlerTest et AutoScrapingListenerTest.
33 lines
1.0 KiB
PHP
33 lines
1.0 KiB
PHP
<?php
|
|
|
|
namespace App\Domain\Manga\Application\CommandHandler;
|
|
|
|
use App\Domain\Manga\Application\Command\CheckMonitoredMangas;
|
|
use App\Domain\Manga\Application\Command\RefreshMangaChapters;
|
|
use App\Domain\Manga\Application\Query\MonitoringCriteria;
|
|
use App\Domain\Manga\Domain\Contract\Repository\MangaRepositoryInterface;
|
|
use Symfony\Component\Messenger\MessageBusInterface;
|
|
|
|
readonly class CheckMonitoredMangasHandler
|
|
{
|
|
public function __construct(
|
|
private MangaRepositoryInterface $mangaRepository,
|
|
private MessageBusInterface $commandBus,
|
|
) {
|
|
}
|
|
|
|
public function handle(CheckMonitoredMangas $command): void
|
|
{
|
|
$criteria = new MonitoringCriteria(
|
|
enabled: true,
|
|
lastCheckBefore: new \DateTimeImmutable('-2 hours')
|
|
);
|
|
|
|
$monitoredMangas = $this->mangaRepository->findByMonitoringCriteria($criteria);
|
|
|
|
foreach ($monitoredMangas as $manga) {
|
|
$this->commandBus->dispatch(new RefreshMangaChapters($manga->getId()));
|
|
}
|
|
}
|
|
}
|