<?php
namespace App\EventSubscriber\Klaviyo;
use App\Env;
use Exception;
use App\DTO\AppDTO;
use App\Event\OrderMakedEvent;
use App\Repository\ProdRepository;
use App\Service\Klaviyo\KlaviyoEventService;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class KlaviyoOrderMaked implements EventSubscriberInterface
{
public function __construct(
private KlaviyoEventService $klaviyoEventService,
private ProdRepository $prodRepository,
private AppDTO $app,
)
{
}
public function onOrderMakedEvent(OrderMakedEvent $event): void
{
try {
$this->klaviyoEventService->track(
'Order Placed',
$event->getOrder()->getEmail(),
[
'order_id' => $event->getOrder()->getId(),
'total' => $event->getOrder()->getAmount(),
'currency' => Env::currency_code(),
'items' => array_map(fn($item) => [
'product_id' => $item['prod'],
'name' => $this->prodRepository->find($item['prod'])->getName(),
'price' => $item['price'],
'quantity' => $item['num'],
], $event->getCartItems()),
]
);
} catch (Exception $e) {
}
}
public static function getSubscribedEvents(): array
{
return [
OrderMakedEvent::NAME => 'onOrderMakedEvent',
];
}
}