ExportRequestDataPersister.php 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\DataPersister\Export\LicenceCmf;
  4. use ApiPlatform\Core\DataPersister\ContextAwareDataPersisterInterface;
  5. use App\ApiResources\Export\ExportRequest;
  6. use App\Entity\Access\Access;
  7. use App\Message\Command\Export;
  8. use App\Service\ServiceIterator\ExporterIterator;
  9. use Exception;
  10. use Symfony\Component\Messenger\MessageBusInterface;
  11. use Symfony\Component\Security\Core\Security;
  12. use Symfony\Component\HttpFoundation\Response;
  13. class ExportRequestDataPersister implements ContextAwareDataPersisterInterface
  14. {
  15. public function __construct(
  16. private Security $security,
  17. private MessageBusInterface $messageBus,
  18. private ExporterIterator $handler
  19. ) {}
  20. public function supports($data, array $context = []): bool
  21. {
  22. return $data instanceof ExportRequest;
  23. }
  24. /**
  25. * @param $exportRequest ExportRequest Une requête d'export
  26. * @param array $context
  27. * @return Response
  28. * @throws Exception
  29. */
  30. public function persist($exportRequest, array $context = []): Response
  31. {
  32. /** @var Access $access */
  33. $access = $this->security->getUser();
  34. $exportRequest->setRequesterId($access->getId());
  35. if ($exportRequest->isAsync()) {
  36. // Send the export request to Messenger (@see App\Message\Handler\ExportHandler)
  37. $this->messageBus->dispatch(
  38. new Export($exportRequest)
  39. );
  40. return new Response(null, 204);
  41. }
  42. $exportService = $this->handler->getExporterFor($exportRequest);
  43. $file = $exportService->export($exportRequest);
  44. return new Response('File generated: ' . $file->getId(), 200);
  45. }
  46. /**
  47. * @throws Exception
  48. */
  49. public function remove($data, array $context = [])
  50. {
  51. throw new Exception('not supported', 500);
  52. }
  53. }