<?php
namespace App\EventSubscriber;
use ApiPlatform\Symfony\EventListener\EventPriorities;
use App\Entity\OfferLease;
use App\Service\Api\OfferLease\AddOfferLeaseService;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Event\ViewEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
class AddOfferLeaseSubscriber implements EventSubscriberInterface
{
/**
* @var AddOfferLeaseService
*/
private $service;
/**
* @var Security
*/
private $security;
public function __construct(AddOfferLeaseService $service, TokenStorageInterface $security)
{
$this->service = $service;
$this->security = $security;
}
public static function getSubscribedEvents(): array
{
return [
KernelEvents::VIEW => ['validation', EventPriorities::PRE_WRITE],
];
}
public function validation(ViewEvent $event)
{
$method = $event->getRequest()->getMethod();
/** @var OfferLease $offerLease */
$offerLease = $event->getControllerResult();
if ($method !== Request::METHOD_POST || !$offerLease instanceof OfferLease) {
return;
}
$currentUser = $this->security->getToken()->getUser();
$lastOfferLease = $this->service->userOfferLeaseInProperty($offerLease->getTheProperty(), $currentUser);
if (($message = $this->service->preInsertCondition($lastOfferLease)) !== true) {
$response = $this->service->jsonResponseFailedCondition($message);
$event->setResponse($response);
}
$offerLease->setUser($currentUser);
}
}