feat: ajout de la gestion des commandes pour la suppression des fichiers CBZ et des chapitres, avec création des gestionnaires et des ressources API correspondantes
This commit is contained in:
parent
7fe4ac0d3b
commit
37e1b202c2
@@ -0,0 +1,58 @@
|
||||
<?php
|
||||
|
||||
namespace App\Domain\Manga\Application\QueryHandler;
|
||||
|
||||
use App\Domain\Manga\Application\Query\DownloadVolume;
|
||||
use App\Domain\Manga\Application\Response\DownloadResponse;
|
||||
use App\Domain\Manga\Domain\Contract\Repository\ChapterRepositoryInterface;
|
||||
use App\Domain\Manga\Domain\Contract\Repository\MangaRepositoryInterface;
|
||||
use App\Domain\Manga\Domain\Contract\Service\FileServiceInterface;
|
||||
use App\Domain\Manga\Domain\Exception\MangaNotFoundException;
|
||||
use App\Domain\Manga\Domain\Exception\VolumeNotFoundException;
|
||||
use App\Domain\Shared\Domain\Contract\QueryHandlerInterface;
|
||||
use App\Domain\Shared\Domain\Contract\QueryInterface;
|
||||
use App\Domain\Shared\Domain\Contract\ResponseInterface;
|
||||
|
||||
readonly class DownloadVolumeHandler implements QueryHandlerInterface
|
||||
{
|
||||
public function __construct(
|
||||
private ChapterRepositoryInterface $chapterRepository,
|
||||
private MangaRepositoryInterface $mangaRepository,
|
||||
private FileServiceInterface $fileService
|
||||
) {}
|
||||
|
||||
public function handle(QueryInterface $query): ResponseInterface
|
||||
{
|
||||
assert($query instanceof DownloadVolume);
|
||||
|
||||
$manga = $this->mangaRepository->findById($query->mangaId);
|
||||
|
||||
if (!$manga) {
|
||||
throw new MangaNotFoundException($query->mangaId);
|
||||
}
|
||||
|
||||
$chapters = $this->chapterRepository->findVisibleWithCbzByMangaIdAndVolume(
|
||||
$query->mangaId,
|
||||
$query->volume
|
||||
);
|
||||
|
||||
if (empty($chapters)) {
|
||||
throw new VolumeNotFoundException($query->mangaId, $query->volume);
|
||||
}
|
||||
|
||||
// Collect CBZ paths for all chapters
|
||||
$cbzPaths = [];
|
||||
foreach ($chapters as $chapter) {
|
||||
$cbzPaths[] = $chapter->getCbzPath();
|
||||
}
|
||||
|
||||
$volumeName = sprintf('%s-volume-%d',
|
||||
$manga->getSlug()->getValue(),
|
||||
$query->volume
|
||||
);
|
||||
|
||||
$httpResponse = $this->fileService->createVolumeCbz($cbzPaths, $volumeName);
|
||||
|
||||
return new DownloadResponse($httpResponse);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user