<?php
namespace App\EventSubscriber;
use App\Entity\Voucher;
use App\Entity\JobQueue;
use App\Service\EsJobQueue;
use App\Event\VoucherPostPersistEvent;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Security\Core\Security;
use App\Service\JobQueueAction\GenerateVoucherCodeAction;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class VoucherSubscriber implements EventSubscriberInterface
{
public function __construct(
private EntityManagerInterface $_em,
private Security $security,
private EsJobQueue $esJobQueue
) {
}
public static function getSubscribedEvents(): array
{
return [
VoucherPostPersistEvent::NAME => 'onPostCreate'
];
}
public function onPostCreate(VoucherPostPersistEvent $event)
{
$object = $event->getObject();
if ($object->getVoucherType() == Voucher::VOUCHERTYPE_ONE) {
$payload['voucherId'] = $object->getId();
$this->esJobQueue->create(
GenerateVoucherCodeAction::NAME,
json_encode($payload),
JobQueue::PRIORITY_LOW,
null,
1,
$this->security->getUser()
);
}
}
}