<?php
namespace App\EventListener\PostValidate;
use App\DTO\Site\SiteOutput;
use App\DTO\Site\UpdateSite;
use App\Entity\Site;
use App\Service\AfterReadStorage;
use App\Service\Manager\SiteManager;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpKernel\Event\ViewEvent;
use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
class UpdateSitePostValidateTransformer implements EventSubscriberInterface
{
private $afterReadStorage;
private $siteManager;
private $normalizer;
public function __construct(
AfterReadStorage $afterReadStorage,
SiteManager $siteManager,
NormalizerInterface $normalizer
) {
$this->afterReadStorage = $afterReadStorage;
$this->siteManager = $siteManager;
$this->normalizer = $normalizer;
}
public static function getSubscribedEvents()
{
return [
PostValidateListener::POST_VALIDATE_TRANSFORMATION => 'transform',
];
}
public function supportTransformation($payload)
{
return $payload instanceof UpdateSite;
}
public function transform(ViewEvent $event)
{
/** @var UpdateSite $payload */
$payload = $event->getControllerResult();
if (!$this->supportTransformation($payload)) {
return;
}
/** @var Site $site */
$site = $this->afterReadStorage->getObject();
$site = $this->siteManager->updateIspFilter($site, $payload->ispFilter);
$this->siteManager->save($site);
$event->setResponse(new JsonResponse($this->normalizer->normalize($site, SiteOutput::class)));
}
}