src/PortoContainers/Zapier/EventSubscriber/OrderSubscriber.php line 49

  1. <?php
  2. namespace App\PortoContainers\Zapier\EventSubscriber;
  3. use App\Event\OrderCreatedEvent;
  4. use App\Event\OrderRemovedEvent;
  5. use App\Event\OrderStatusChangedEvent;
  6. use App\PortoContainers\Global\DTO\OrderData;
  7. use App\PortoContainers\Zapier\Actions\RemoveOrderFromTriggersAction;
  8. use App\PortoContainers\Zapier\DTO\RemoveOrderFromTriggersData;
  9. use App\PortoContainers\Zapier\DTO\ZapierTriggerData;
  10. use App\PortoContainers\Zapier\Entities\ZapierTrigger;
  11. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  12. use App\PortoContainers\Zapier\Actions\AddTriggerAction;
  13. use App\PortoContainers\Zapier\Actions\IsOrderAcceptableForZapierAction;
  14. class OrderSubscriber implements EventSubscriberInterface
  15. {
  16.     /**
  17.      * @param AddTriggerAction $addTriggerAction
  18.      * @param IsOrderAcceptableForZapierAction $isOrderAcceptableForZapierAction
  19.      * @param RemoveOrderFromTriggersAction $removeOrderFromTriggersAction
  20.      */
  21.     public function __construct(
  22.         private readonly AddTriggerAction                 $addTriggerAction,
  23.         private readonly IsOrderAcceptableForZapierAction $isOrderAcceptableForZapierAction,
  24.         private readonly RemoveOrderFromTriggersAction    $removeOrderFromTriggersAction
  25.     )
  26.     {
  27.     }
  28.     /**
  29.      * @return array
  30.      */
  31.     public static function getSubscribedEvents(): array
  32.     {
  33.         return [
  34.             OrderCreatedEvent::class => ['orderCreatedAction', -100],
  35.             OrderStatusChangedEvent::class => ['orderStatusChangedAction', -100],
  36.             OrderRemovedEvent::class => ['orderRemovedAction', -100]
  37.         ];
  38.     }
  39.     /**
  40.      * @param OrderCreatedEvent $event
  41.      * @return void
  42.      * @throws \Exception
  43.      */
  44.     public function orderCreatedAction(OrderCreatedEvent $event): void
  45.     {
  46.         $this->addTriggerAction->run(
  47.             new ZapierTriggerData(
  48.                 ZapierTrigger::TRIGGER_ORDER_CREATED,
  49.                 $event->getOrder()->getId()
  50.             )
  51.         );
  52.     }
  53.     /**
  54.      * @param OrderStatusChangedEvent $event
  55.      * @return void
  56.      * @throws \Exception
  57.      */
  58.     public function orderStatusChangedAction(OrderStatusChangedEvent $event): void
  59.     {
  60.         if ($this->isOrderAcceptableForZapierAction->run(
  61.             new OrderData($event->getOrder())
  62.         )) {
  63.             $this->addTriggerAction->run(
  64.                 new ZapierTriggerData(
  65.                     ZapierTrigger::TRIGGER_ORDER_STATUS_UPDATED,
  66.                     $event->getOrder()->getId()
  67.                 )
  68.             );
  69.         }
  70.     }
  71.     /**
  72.      * @param OrderRemovedEvent $event
  73.      * @return void
  74.      * @throws \Exception
  75.      */
  76.     public function orderRemovedAction(OrderRemovedEvent $event): void
  77.     {
  78.         $this->removeOrderFromTriggersAction->run(
  79.             new RemoveOrderFromTriggersData($event->getOrder())
  80.         );
  81.     }
  82. }