feat: amélioration de la gestion des messages dans le Makefile avec la séparation des commandes et des événements. Mise à jour des services pour intégrer un nouvel EventDispatcher et réorganisation des imports dans les fichiers concernés. Gestion des exceptions ajoutée dans le provider Mangadex pour une meilleure robustesse.

This commit is contained in:
ext.jeremy.guillot@maxicoffee.domains
2025-08-01 15:14:12 +02:00
parent bec1572fcb
commit 8d14676656
5 changed files with 23 additions and 14 deletions

View File

@@ -145,8 +145,11 @@ twig-extension: ## Create a new twig extension
stimulus: ## Create a new stimulus controller stimulus: ## Create a new stimulus controller
@$(SYMFONY) make:stimulus-controller @$(SYMFONY) make:stimulus-controller
consume: consume-commands: ## Consume commands messages
@$(SYMFONY) messenger:consume commands events -vv @$(SYMFONY) messenger:consume commands -vv
consume-events: ## Consume events messages
@$(SYMFONY) messenger:consume events -vv
consume-schedule: ## Consume schedule messages consume-schedule: ## Consume schedule messages
@$(SYMFONY) messenger:consume async -vv scheduler_default @$(SYMFONY) messenger:consume async -vv scheduler_default

View File

@@ -27,11 +27,13 @@ framework:
'App\Domain\Scraping\Application\Command\ScrapeChapter': commands 'App\Domain\Scraping\Application\Command\ScrapeChapter': commands
'App\Domain\Manga\Application\Command\FetchMangaChapters': commands 'App\Domain\Manga\Application\Command\FetchMangaChapters': commands
'App\Domain\Manga\Application\Command\RefreshMangaChapters': commands 'App\Domain\Manga\Application\Command\RefreshMangaChapters': commands
# Events
# Events spécifiques (pour compatibilité, peuvent être supprimés si tous implémentent AsyncDomainEvent)
'App\Domain\Scraping\Domain\Event\ChapterScrapingStarted': events 'App\Domain\Scraping\Domain\Event\ChapterScrapingStarted': events
'App\Domain\Scraping\Domain\Event\ChapterScrapingCompleted': events 'App\Domain\Scraping\Domain\Event\ChapterScrapingCompleted': events
'App\Domain\Scraping\Domain\Event\ChapterScrapingFailed': events 'App\Domain\Scraping\Domain\Event\ChapterScrapingFailed': events
'App\Domain\Manga\Domain\Event\ChapterReadyForScraping': events 'App\Domain\Manga\Domain\Event\ChapterReadyForScraping': events
'App\Domain\Manga\Domain\Event\MangaCreated': events
# Legacy messages (à garder si nécessaire) # Legacy messages (à garder si nécessaire)
'App\Message\DownloadChapter': commands 'App\Message\DownloadChapter': commands

View File

@@ -126,10 +126,6 @@ services:
tags: tags:
- { name: messenger.message_handler, bus: command.bus } - { name: messenger.message_handler, bus: command.bus }
App\Domain\Manga\Infrastructure\CommandHandler\SymfonyFetchMangaChaptersHandler:
tags:
- { name: messenger.message_handler, bus: command.bus }
App\Domain\Scraping\Infrastructure\Service\CbzGenerator: App\Domain\Scraping\Infrastructure\Service\CbzGenerator:
arguments: arguments:
$projectDir: '%kernel.project_dir%' $projectDir: '%kernel.project_dir%'
@@ -146,10 +142,6 @@ services:
$publicDir: '%kernel.project_dir%/public' $publicDir: '%kernel.project_dir%/public'
$httpClient: '@GuzzleHttp\Client' $httpClient: '@GuzzleHttp\Client'
App\Domain\Manga\Infrastructure\EventListener\MangaCreatedListener:
tags:
- { name: messenger.message_handler }
# Chapter Repository # Chapter Repository
App\Domain\Manga\Domain\Contract\Repository\ChapterRepositoryInterface: App\Domain\Manga\Domain\Contract\Repository\ChapterRepositoryInterface:
alias: App\Domain\Manga\Infrastructure\Persistence\Repository\LegacyChapterRepository alias: App\Domain\Manga\Infrastructure\Persistence\Repository\LegacyChapterRepository
@@ -162,3 +154,10 @@ services:
App\Domain\Manga\Infrastructure\Service\FileService: App\Domain\Manga\Infrastructure\Service\FileService:
arguments: arguments:
$cbzStoragePath: '%kernel.project_dir%/public/cbz' $cbzStoragePath: '%kernel.project_dir%/public/cbz'
App\Domain\Shared\Domain\Contract\EventDispatcherInterface:
alias: App\Domain\Shared\Infrastructure\Messenger\SymfonyMessengerEventDispatcher
App\Domain\Manga\Infrastructure\CommandHandler\SymfonyFetchMangaChaptersHandler:
tags:
- { name: messenger.message_handler, bus: command.bus }

View File

@@ -3,6 +3,7 @@
namespace App\Domain\Manga\Application\CommandHandler; namespace App\Domain\Manga\Application\CommandHandler;
use App\Domain\Manga\Application\Command\CreateMangaFromMangadex; use App\Domain\Manga\Application\Command\CreateMangaFromMangadex;
use App\Domain\Manga\Application\Response\CreateMangaResponse;
use App\Domain\Manga\Domain\Contract\Provider\MangaProviderInterface; use App\Domain\Manga\Domain\Contract\Provider\MangaProviderInterface;
use App\Domain\Manga\Domain\Contract\Repository\MangaRepositoryInterface; use App\Domain\Manga\Domain\Contract\Repository\MangaRepositoryInterface;
use App\Domain\Manga\Domain\Contract\Service\ImageProcessorInterface; use App\Domain\Manga\Domain\Contract\Service\ImageProcessorInterface;

View File

@@ -30,7 +30,7 @@ readonly class MangadexProvider implements MangaProviderInterface
} }
$mangas = $this->createMangasFromResults($results['data']); $mangas = $this->createMangasFromResults($results['data']);
$this->enrichWithRatings($mangas); // $this->enrichWithRatings($mangas);
usort($mangas, fn ($a, $b) => ($b->getRating() ?? 0) <=> ($a->getRating() ?? 0)); usort($mangas, fn ($a, $b) => ($b->getRating() ?? 0) <=> ($a->getRating() ?? 0));
@@ -114,7 +114,11 @@ readonly class MangadexProvider implements MangaProviderInterface
$mangas $mangas
); );
$ratings = $this->client->getMangaRatings($externalIds); try {
$ratings = $this->client->getMangaRatings($externalIds);
} catch (\Exception $e) {
return;
}
if (isset($ratings['statistics'])) { if (isset($ratings['statistics'])) {
foreach ($mangas as $manga) { foreach ($mangas as $manga) {