Files
Mangarr/src/Domain/Conversion/Application/CommandHandler/ConvertFileCommandHandler.php
ext.jeremy.guillot@maxicoffee.domains 5ed303612a feat: migrer vers Symfony 8, PHP 8.4 et les dépendances majeures associées
- PHP 8.3 → 8.4 (Dockerfile + composer.json)
- Symfony 7.0 → 8.0 (tous les composants symfony/*)
- API Platform 3.x → 4.x : migration openapiContext → openapi: new Operation(...)
- Doctrine DBAL 3 → 4 : suppression use_savepoints, replace prepare/executeQuery
- Doctrine ORM 2.x → 3.x : ClassMetadataInfo → ClassMetadata, setParameters → setParameter
- Doctrine Bundle 2.x → 3.x, Fixtures Bundle 3.x → 4.x
- zenstruck/foundry 1.x → 2.x : ModelFactory → PersistentObjectFactory, getDefaults → defaults
- phpmd/phpmd 2.x → 3.x-dev (seule version supportant Symfony 8)
- phparkitect 0.3 → 0.8 : NotDependsOnTheseNamespaces prend un array
- symfony/mercure-bundle 0.3 → 0.4, symfony/monolog-bundle 3 → 4
- Suppression de runtime/frankenphp-symfony (intégré nativement dans symfony/runtime 8)
- worker.Caddyfile : suppression de APP_RUNTIME (détection automatique Symfony 8)
- Routes errors.xml/wdt.xml/profiler.xml → .php (Symfony 8 supprime le XML)
- Types::ARRAY → Types::JSON dans Entity/Manga.php (DBAL 4 retire array type)
- Suppression de src/Schedule.php (doublon vide avec MonitoringSchedule)
- Tests : hydra:Collection → Collection, hydra:member → member (API Platform 4)
2026-03-26 17:55:12 +01:00

53 lines
1.7 KiB
PHP

<?php
namespace App\Domain\Conversion\Application\CommandHandler;
use App\Domain\Conversion\Application\Command\ConvertFileCommand;
use App\Domain\Conversion\Application\Response\ConversionResponse;
use App\Domain\Conversion\Domain\Contract\ConversionServiceInterface;
use App\Domain\Conversion\Domain\Exception\ConversionException;
use App\Domain\Conversion\Domain\Model\ConversionRequest;
final readonly class ConvertFileCommandHandler
{
private const MAX_FILE_SIZE = 150 * 1024 * 1024; // 150MB
public function __construct(
private ConversionServiceInterface $conversionService,
) {
}
public function handle(ConvertFileCommand $command): ConversionResponse
{
$this->validateCommand($command);
$request = new ConversionRequest(
filePath: $command->filePath,
originalFilename: $command->originalFilename,
fileSize: $command->fileSize
);
$result = $this->conversionService->convert($request);
return ConversionResponse::fromConversionResult($result);
}
private function validateCommand(ConvertFileCommand $command): void
{
if (!file_exists($command->filePath)) {
throw ConversionException::fileNotFound($command->filePath);
}
if ($command->fileSize > self::MAX_FILE_SIZE) {
throw ConversionException::fileSizeExceedsLimit($command->fileSize, self::MAX_FILE_SIZE);
}
$extension = strtolower(pathinfo($command->originalFilename, PATHINFO_EXTENSION));
$allowedExtensions = ['cbr', 'cbz', 'zip', 'rar'];
if (!in_array($extension, $allowedExtensions)) {
throw ConversionException::invalidFileFormat($command->originalFilename);
}
}
}