42 lines
1.5 KiB
PHP
42 lines
1.5 KiB
PHP
<?php
|
|
|
|
namespace App\Download\Action\Handler;
|
|
|
|
use App\Download\Action\Command\DeleteDownloadCommand;
|
|
use App\Download\Action\Result\DeleteDownloadResult;
|
|
use App\Download\Framework\Repository\DownloadRepository;
|
|
use App\Library\Action\Command\DeleteMediaFileCommand;
|
|
use App\Library\Action\Handler\DeleteMediaFileHandler;
|
|
use OneToMany\RichBundle\Contract\CommandInterface;
|
|
use OneToMany\RichBundle\Contract\HandlerInterface;
|
|
use OneToMany\RichBundle\Contract\ResultInterface;
|
|
|
|
/** @implements HandlerInterface<DeleteDownloadCommand, DeleteDownloadResult> */
|
|
readonly class DeleteDownloadHandler implements HandlerInterface
|
|
{
|
|
public function __construct(
|
|
private DownloadRepository $downloadRepository,
|
|
private DeleteMediaFileHandler $deleteMediaFileHandler,
|
|
) {}
|
|
|
|
public function handle(CommandInterface $command): ResultInterface
|
|
{
|
|
$download = $this->downloadRepository->find($command->downloadId);
|
|
|
|
if (true === $command->deleteFile) {
|
|
$deletedFileResult = $this->deleteMediaFileHandler->handle(new DeleteMediaFileCommand(
|
|
filename: $download->getFilename(),
|
|
downloadId: $command->downloadId
|
|
));
|
|
}
|
|
$this->downloadRepository->delete($command->downloadId);
|
|
|
|
return new DeleteDownloadResult(
|
|
status: 200,
|
|
message: 'Success',
|
|
download: $download,
|
|
deleteMediaFileResult: $deletedFileResult ?? null
|
|
);
|
|
}
|
|
}
|