43 lines
1.4 KiB
PHP
43 lines
1.4 KiB
PHP
<?php
|
|
|
|
namespace App\Library\Action\Handler;
|
|
|
|
use App\Base\Service\MediaFiles;
|
|
use App\Download\Action\Result\DeleteMediaFileResult;
|
|
use App\Download\Framework\Entity\Download;
|
|
use App\Download\Framework\Repository\DownloadRepository;
|
|
use App\Library\Action\Command\DeleteMediaFileCommand;
|
|
use OneToMany\RichBundle\Contract\CommandInterface;
|
|
use OneToMany\RichBundle\Contract\HandlerInterface;
|
|
use OneToMany\RichBundle\Contract\ResultInterface;
|
|
|
|
/**
|
|
* @implements HandlerInterface<DeleteMediaFileCommand,DeleteMediaFileResult>
|
|
*/
|
|
class DeleteMediaFileHandler implements HandlerInterface
|
|
{
|
|
public function __construct(
|
|
private readonly DownloadRepository $downloadRepository,
|
|
private readonly MediaFiles $mediaFiles,
|
|
) {}
|
|
|
|
public function handle(CommandInterface $command): ResultInterface
|
|
{
|
|
/** @var Download $downloadRecord */
|
|
$downloadRecord = $this->downloadRepository->find($command->downloadId);
|
|
$filepath = $this->getFullFilepath($downloadRecord);
|
|
$result = $this->mediaFiles->removeFile($filepath);
|
|
|
|
return new DeleteMediaFileResult(
|
|
message: true === $result ? 'File removed' : 'File not removed',
|
|
filepath: $filepath,
|
|
isDeleted: $result
|
|
);
|
|
}
|
|
|
|
private function getFullFilepath(Download $download): string
|
|
{
|
|
return $this->mediaFiles->getPathByType($download->getMediaType()) . DIRECTORY_SEPARATOR . $download->getFilename();
|
|
}
|
|
}
|