<?php
declare(strict_types=1);
namespace App\Subscriber\Pos;
use App\Action\Query\Pos\GetPosByNumber\GetPosByNumberQuery;
use App\Service\Context\ContextInterface;
use App\Tool\Uuid\UuidBuilder;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\ControllerEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\Messenger\MessageBusInterface;
use Symfony\Component\Messenger\Stamp\HandledStamp;
class PosNumberSubscriber implements EventSubscriberInterface
{
const PRIORITY = -127;
private string $posTypeId;
private ContextInterface $context;
private MessageBusInterface $messageBus;
private bool $skip = true;
public function __construct(
string $posTypeId,
ContextInterface $context,
MessageBusInterface $messageBus
)
{
$this->posTypeId = $posTypeId;
$this->context = $context;
$this->messageBus = $messageBus;
}
public static function getSubscribedEvents()
{
return [
KernelEvents::CONTROLLER => [
['onKernelController', self::PRIORITY]
]
];
}
public function onKernelController(ControllerEvent $event): void
{
if ($this->skip) {
return;
}
$posTypeId = UuidBuilder::build($this->posTypeId);
$posId = $this->messageBus->dispatch(
new GetPosByNumberQuery()
)->last(HandledStamp::class)->getResult();
$this->context
->setPOSTypeId($posTypeId)
->setPosId(UuidBuilder::build($posId))
;
}
public function setSkip(bool $skip): self
{
$this->skip = $skip;
return $this;
}
}