<?php
namespace App\EventSubscriber;
use App\Event\OrderMakedEvent;
use App\Event\PromocodeEntered;
use App\Service\Promocode\PromocodeService;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
/** @package App\EventSubscriber */
class PromocodeSubscriber implements EventSubscriberInterface
{
public function __construct(
private PromocodeService $promocode,
private EntityManagerInterface $em,
)
{
}
public function onPromocodeEntered(PromocodeEntered $event): void
{
$this->promocode->setPromocode($event->getCode(), $event->getDiscount());
}
public function onOrderMaked(OrderMakedEvent $event): void
{
$order = $event->getOrder();
$order->setPromocode($this->promocode->getCode());
$this->em->flush();
}
public static function getSubscribedEvents(): array
{
return [
PromocodeEntered::NAME => 'onPromocodeEntered',
OrderMakedEvent::NAME => 'onOrderMaked',
];
}
}