src/EventSubscriber/Game/TicketEventSubscriber.php line 54

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber\Game;
  3. use App\DependencyInjection\Framework\EntityManagerDI;
  4. use App\DependencyInjection\Framework\MessageBusDI;
  5. use App\DependencyInjection\Service\PaymentMiddlewareServiceDI;
  6. use App\DTO\Data\Notification\Ticket\TicketInvalidatedEmailTemplate;
  7. use App\DTO\Data\Notification\Ticket\TicketInvalidatedPushTemplate;
  8. use App\Enum\Game\TicketStatus;
  9. use App\Event\Game\TicketEvent;
  10. use App\Message\Notification\GenerateNotificationMessage;
  11. use App\Message\Payment\RefundTicketPaymentMessage;
  12. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  13. class TicketEventSubscriber implements EventSubscriberInterface
  14. {
  15.     use EntityManagerDI;
  16.     use MessageBusDI;
  17.     use PaymentMiddlewareServiceDI;
  18.     public static function getSubscribedEvents(): array
  19.     {
  20.         return [
  21.             TicketEvent::VALIDATED   => 'onTicketValidated',
  22.             TicketEvent::INVALIDATED => 'onTicketInvalidated',
  23.             TicketEvent::CANCELED    => 'onTicketCanceled',
  24.         ];
  25.     }
  26.     public function onTicketCanceled(TicketEvent $event): void
  27.     {
  28.         $ticket $event->getTicket();
  29.         if ($ticket->getStatus() !== TicketStatus::Canceled) {
  30.             return;
  31.         }
  32.         if ($ticket->getFile() != null) {
  33.             $file $ticket->getFile();
  34.             $ticket->setFile(null);
  35.             $this->entityManager->remove($file);
  36.             $this->entityManager->flush();
  37.         }
  38.         if ($ticket->canBeRefunded()) {
  39.             $this->messageBus->dispatch(new RefundTicketPaymentMessage($ticket));
  40.         }
  41.         $this->messageBus->dispatch(new GenerateNotificationMessage($ticket->getUser(), new TicketInvalidatedPushTemplate($ticket), $ticket->getId(), $ticket->get_class_short_name()));
  42.         $this->messageBus->dispatch(new GenerateNotificationMessage($ticket->getUser(), new TicketInvalidatedEmailTemplate($ticket), $ticket->getId(), $ticket->get_class_short_name()));
  43.     }
  44.     public function onTicketValidated(TicketEvent $event): void
  45.     {
  46.         $ticket $event->getTicket();
  47.         if ($ticket->getStatus() !== TicketStatus::Validated) {
  48.             return;
  49.         }
  50.     }
  51.     public function onTicketInvalidated(TicketEvent $event): void
  52.     {
  53.         $ticket $event->getTicket();
  54.         if ($ticket->getStatus() !== TicketStatus::Invalidated) {
  55.             return;
  56.         }
  57.         if ($ticket->canBeRefunded()) {
  58.             $this->paymentMiddlewareService->refundTransaction($ticket->getPurchaseTransaction());
  59.         }
  60.         $this->messageBus->dispatch(new GenerateNotificationMessage($ticket->getUser(), new TicketInvalidatedPushTemplate($ticket), $ticket->getId(), $ticket->get_class_short_name()));
  61.         $this->messageBus->dispatch(new GenerateNotificationMessage($ticket->getUser(), new TicketInvalidatedEmailTemplate($ticket), $ticket->getId(), $ticket->get_class_short_name()));
  62.     }
  63. }