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

@@ -8,19 +8,53 @@ use App\Domain\Manga\Infrastructure\ApiPlatform\State\Processor\FetchMangaChapte
use Symfony\Component\Validator\Constraints as Assert;
#[ApiResource(
shortName: 'Chapters',
shortName: 'Mangadex',
operations: [
new Post(
uriTemplate: '/manga/chapters/fetch',
processor: FetchMangaChaptersProcessor::class,
status: 202
status: 202,
description: 'Déclenche la récupération des chapitres d\'un manga',
openapiContext: [
'summary' => 'Récupérer les chapitres d\'un manga',
'description' => 'Lance le processus de récupération des chapitres depuis la source externe pour un manga donné',
'requestBody' => [
'description' => 'Données requises pour récupérer les chapitres',
'required' => true,
'content' => [
'application/json' => [
'schema' => [
'type' => 'object',
'properties' => [
'mangaId' => [
'type' => 'string',
'format' => 'uuid',
'description' => 'L\'identifiant unique du manga',
'example' => '123e4567-e89b-12d3-a456-426614174000'
]
],
'required' => ['mangaId']
]
]
]
],
'responses' => [
'202' => [
'description' => 'Demande de récupération acceptée et mise en file d\'attente'
],
'422' => [
'description' => 'Données de validation invalides'
]
]
]
)
]
)]
class FetchMangaChaptersResource
{
public function __construct(
#[Assert\NotBlank]
public string $externalId
#[Assert\NotBlank(message: 'L\'identifiant du manga est obligatoire')]
#[Assert\Uuid(message: 'L\'identifiant du manga doit être un UUID valide')]
public string $mangaId
) {}
}
}