FreemiumEventProcessor.php 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\State\Processor\Freemium;
  4. use ApiPlatform\Metadata\Delete;
  5. use ApiPlatform\Metadata\Operation;
  6. use ApiPlatform\Metadata\Post;
  7. use App\ApiResources\Freemium\FreemiumEvent;
  8. use App\Entity\Booking\Event;
  9. use App\Repository\Booking\EventRepository;
  10. use App\Service\ApiResourceBuilder\Freemium\EventMappingBuilder;
  11. use App\State\Processor\EntityProcessor;
  12. use Doctrine\ORM\EntityManagerInterface;
  13. /**
  14. * Classe FreemiumEventProcessor qui est un custom dataPersister gérant la resource FreemiumEvent.
  15. */
  16. class FreemiumEventProcessor extends EntityProcessor
  17. {
  18. public function __construct(
  19. private EntityManagerInterface $entityManager,
  20. private EventMappingBuilder $eventMappingBuilder,
  21. private EventRepository $eventRepository,
  22. ) {
  23. }
  24. /**
  25. * @param FreemiumEvent $data
  26. * @param array<mixed> $uriVariables
  27. * @param array<mixed> $context
  28. */
  29. public function process(mixed $data, Operation $operation, array $uriVariables = [], array $context = []): FreemiumEvent
  30. {
  31. if ($operation instanceof Post) {
  32. $event = new Event();
  33. } else {
  34. $event = $this->eventRepository->find($uriVariables['id']);
  35. }
  36. if ($operation instanceof Delete) {
  37. $this->entityManager->remove($event);
  38. $freemiumEvent = new FreemiumEvent();
  39. } else {
  40. $this->eventMappingBuilder->mapInformations($event, $data);
  41. $this->entityManager->persist($event);
  42. $freemiumEvent = $data;
  43. }
  44. $this->entityManager->flush();
  45. if ($operation instanceof Post) {
  46. $freemiumEvent->id = $event->getId();
  47. }
  48. return $freemiumEvent;
  49. }
  50. }