feat: delete downloads from DB
This commit is contained in:
15
src/Download/Action/Command/DeleteDownloadCommand.php
Normal file
15
src/Download/Action/Command/DeleteDownloadCommand.php
Normal file
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
|
||||
namespace App\Download\Action\Command;
|
||||
|
||||
use OneToMany\RichBundle\Contract\CommandInterface;
|
||||
|
||||
/**
|
||||
* @implements CommandInterface<DeleteDownloadCommand>
|
||||
*/
|
||||
class DeleteDownloadCommand implements CommandInterface
|
||||
{
|
||||
public function __construct(
|
||||
public int $downloadId,
|
||||
) {}
|
||||
}
|
||||
26
src/Download/Action/Handler/DeleteDownloadHandler.php
Normal file
26
src/Download/Action/Handler/DeleteDownloadHandler.php
Normal file
@@ -0,0 +1,26 @@
|
||||
<?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 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,
|
||||
) {}
|
||||
|
||||
public function handle(CommandInterface $command): ResultInterface
|
||||
{
|
||||
$download = $this->downloadRepository->find($command->downloadId);
|
||||
$this->downloadRepository->delete($command->downloadId);
|
||||
|
||||
return new DeleteDownloadResult(200, 'Success', $download);
|
||||
}
|
||||
}
|
||||
24
src/Download/Action/Input/DeleteDownloadInput.php
Normal file
24
src/Download/Action/Input/DeleteDownloadInput.php
Normal file
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
namespace App\Download\Action\Input;
|
||||
|
||||
use App\Download\Action\Command\DeleteDownloadCommand;
|
||||
use OneToMany\RichBundle\Attribute\SourceRoute;
|
||||
use OneToMany\RichBundle\Contract\CommandInterface;
|
||||
use OneToMany\RichBundle\Contract\InputInterface;
|
||||
|
||||
/** @implements InputInterface<DeleteDownloadInput> */
|
||||
class DeleteDownloadInput implements InputInterface
|
||||
{
|
||||
public function __construct(
|
||||
#[SourceRoute('downloadId')]
|
||||
public int $downloadId,
|
||||
) {}
|
||||
|
||||
public function toCommand(): CommandInterface
|
||||
{
|
||||
return new DeleteDownloadCommand(
|
||||
$this->downloadId,
|
||||
);
|
||||
}
|
||||
}
|
||||
16
src/Download/Action/Result/DeleteDownloadResult.php
Normal file
16
src/Download/Action/Result/DeleteDownloadResult.php
Normal file
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace App\Download\Action\Result;
|
||||
|
||||
use App\Download\Framework\Entity\Download;
|
||||
use OneToMany\RichBundle\Contract\ResultInterface;
|
||||
|
||||
/** @implements ResultInterface<DownloadMediaResult> */
|
||||
class DeleteDownloadResult implements ResultInterface
|
||||
{
|
||||
public function __construct(
|
||||
public int $status,
|
||||
public string $message,
|
||||
public Download $download,
|
||||
) {}
|
||||
}
|
||||
@@ -2,6 +2,8 @@
|
||||
|
||||
namespace App\Download\Framework\Controller;
|
||||
|
||||
use App\Download\Action\Handler\DeleteDownloadHandler;
|
||||
use App\Download\Action\Input\DeleteDownloadInput;
|
||||
use App\Download\Action\Input\DownloadMediaInput;
|
||||
use App\Download\Framework\Repository\DownloadRepository;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||
@@ -56,4 +58,23 @@ class ApiController extends AbstractController
|
||||
|
||||
return $this->json(['status' => 200, 'message' => 'Added to Queue']);
|
||||
}
|
||||
|
||||
#[Route('/api/download/{downloadId}', name: 'api_download_delete', methods: ['DELETE'])]
|
||||
public function deleteDownload(
|
||||
Request $request,
|
||||
DeleteDownloadInput $input,
|
||||
DeleteDownloadHandler $handler,
|
||||
): Response {
|
||||
$result = $handler->handle($input->toCommand());
|
||||
$this->hub->publish(new Update(
|
||||
$request->getSession()->get('mercure_alert_topic'),
|
||||
$this->renderView('broadcast/Alert.stream.html.twig', [
|
||||
'alert_id' => uniqid(),
|
||||
'title' => 'Success',
|
||||
'message' => '"' . $result->download->getTitle() . '" has been deleted.',
|
||||
])
|
||||
));
|
||||
|
||||
return $this->json(['status' => 200, 'message' => 'Download Deleted']);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user