<?php
namespace App\Events;
use App\Entity\AgainstProposal;
use App\Entity\CounterOffer;
use App\Services\Api\AgainstProposalServices;
use App\Services\Exception\AgainstProposalCounterOfferException;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\Event\ViewEvent;
class AgainstProposalCounterOfferPutSubscriber implements EventSubscriberInterface
{
/**
* @var AgainstProposalServices
*/
private $services;
/**
* @param AgainstProposalServices $services
*/
public function __construct(AgainstProposalServices $services)
{
$this->services = $services;
}
/**
* @throws AgainstProposalCounterOfferException
*/
public function onKernelRequest(RequestEvent $event)
{
$request = $event->getRequest();
$resource = $request->attributes->get('_api_resource_class');
if (
($resource === CounterOffer::class || $resource === AgainstProposal::class)
&& $request->getMethod() === Request::METHOD_PUT
) {
$data = json_decode($request->getContent(), true);
if ($this->services->isStatusParameterExistAndValid($data) !== true) {
throw new AgainstProposalCounterOfferException('parameter status have invalid value');
}
$this->services->processValidationAgainstProposal($data);
}
}
public function onKernelView(ViewEvent $event)
{
$request = $event->getRequest();
$resource = $request->attributes->get('_api_resource_class');
if (
($resource === CounterOffer::class || $resource === AgainstProposal::class)
&& $request->getMethod() === Request::METHOD_PUT
) {
if ($responseData = $event->getControllerResult()) {
$requestData = json_decode($request->getContent(), true);
$this->services->postProcessValidation($resource, $requestData, json_decode($responseData, true));
}
}
}
public static function getSubscribedEvents(): array
{
return [
'kernel.request' => 'onKernelRequest',
'kernel.view' => ['onKernelView', 10]
];
}
}