src/EventSubscriber/Klaviyo/KlaviyoOrderMaked.php line 24

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber\Klaviyo;
  3. use App\Env;
  4. use Exception;
  5. use App\DTO\AppDTO;
  6. use App\Event\OrderMakedEvent;
  7. use App\Repository\ProdRepository;
  8. use App\Service\Klaviyo\KlaviyoEventService;
  9. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  10. class KlaviyoOrderMaked implements EventSubscriberInterface
  11. {
  12.     public function __construct(
  13.         private KlaviyoEventService $klaviyoEventService,
  14.         private ProdRepository $prodRepository,
  15.         private AppDTO $app,
  16.     )
  17.     {
  18.         
  19.     }
  20.     public function onOrderMakedEvent(OrderMakedEvent $event): void
  21.     {
  22.         try {
  23.             $this->klaviyoEventService->track(
  24.                 'Order Placed',
  25.                 $event->getOrder()->getEmail(),
  26.                 [
  27.                     'order_id'    => $event->getOrder()->getId(),
  28.                     'total'       => $event->getOrder()->getAmount(),
  29.                     'currency'    => Env::currency_code(),
  30.                     'items'       => array_map(fn($item) => [
  31.                         'product_id' => $item['prod'],
  32.                         'name'       => $this->prodRepository->find($item['prod'])->getName(),
  33.                         'price'      => $item['price'],
  34.                         'quantity'   => $item['num'],
  35.                     ], $event->getCartItems()),
  36.                 ]
  37.             );
  38.         } catch (Exception $e) {
  39.         }
  40.     }
  41.     public static function getSubscribedEvents(): array
  42.     {
  43.         return [
  44.             OrderMakedEvent::NAME => 'onOrderMakedEvent',
  45.         ];
  46.     }
  47. }