*/ readonly class DeleteDownloadHandler implements HandlerInterface { public function __construct( private MessageBusInterface $bus, 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); $this->bus->dispatch(new AddEventLogCommand( $download->getUser(), DownloadEvents::DOWNLOAD_DELETED->type(), DownloadEvents::DOWNLOAD_DELETED->message(), (array) $download )); return new DeleteDownloadResult( status: 200, message: 'Success', download: $download, deleteMediaFileResult: $deletedFileResult ?? null ); } }