feat: ajout de la fonctionnalité de récupération des chapitres de manga, avec mise à jour de l'API et des composants pour gérer la récupération asynchrone des chapitres, ainsi que des améliorations dans la gestion des erreurs et des tests associés.

This commit is contained in:
ext.jeremy.guillot@maxicoffee.domains
2025-07-06 16:20:15 +02:00
parent 5a5569cf2c
commit ee2a9b3750
14 changed files with 137 additions and 34 deletions

View File

@@ -5,6 +5,6 @@ namespace App\Domain\Manga\Application\Command;
readonly class FetchMangaChapters
{
public function __construct(
public string $externalId
public string $mangaId
) {}
}
}

View File

@@ -24,7 +24,7 @@ readonly class CreateMangaFromMangadexHandler
public function handle(CreateMangaFromMangadex $command): void
{
$manga = $this->mangaProvider->findByExternalId(new ExternalId($command->externalId));
if ($manga === null) {
throw new MangaNotFoundException('Manga not found on Mangadex');
}
@@ -32,10 +32,10 @@ readonly class CreateMangaFromMangadexHandler
try {
// Télécharge l'image originale
$fullImagePath = $this->imageProcessor->downloadImage($manga->getImageUrl());
// Crée la miniature à partir de l'image originale
$thumbnailPath = $this->imageProcessor->createThumbnail($fullImagePath);
// Met à jour le manga avec les nouveaux chemins d'images
$manga->updateImageUrls(new ImageUrls($fullImagePath, $thumbnailPath));
} catch (\Exception $e) {
@@ -43,7 +43,7 @@ readonly class CreateMangaFromMangadexHandler
}
$this->mangaRepository->save($manga);
$this->messageBus->dispatch(new MangaCreated($command->externalId));
$this->messageBus->dispatch(new MangaCreated($manga->getId()->getValue(), $command->externalId));
}
}
}

View File

@@ -54,7 +54,7 @@ readonly class CreateMangaHandler
$this->mangaRepository->save($manga);
if ($command->externalId) {
$this->messageBus->dispatch(new MangaCreated($command->externalId));
$this->messageBus->dispatch(new MangaCreated($manga->getId()->getValue(), $command->externalId));
}
}
}

View File

@@ -19,12 +19,18 @@ readonly class FetchMangaChaptersHandler
public function handle(FetchMangaChapters $command): void
{
$manga = $this->mangaRepository->findByExternalId(new ExternalId($command->externalId));
$manga = $this->mangaRepository->findById($command->mangaId);
if ($manga === null) {
throw new \RuntimeException('Manga not found');
}
if ($manga->getExternalId() === null) {
throw new \RuntimeException('Manga has no external ID');
}
$externalId = $manga->getExternalId()->getValue();
$offset = 0;
$limit = 500;
$hasMore = true;
@@ -34,7 +40,7 @@ readonly class FetchMangaChaptersHandler
while ($hasMore) {
$feed = $this->mangadexClient->getMangaFeed(
$command->externalId,
$externalId,
$offset,
$limit
);