<?php
namespace App\EventListener\PostValidate;
use App\DTO\User\ClientProfileOutput;
use App\DTO\User\UpdateClientProfile;
use App\Service\Manager\ClientProfileManager;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpKernel\Event\ViewEvent;
use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
class UpdateClientProfilePostValidateTransformer implements EventSubscriberInterface
{
private $clientProfileManager;
private $normalizer;
public function __construct(ClientProfileManager $clientProfileManager, NormalizerInterface $normalizer)
{
$this->clientProfileManager = $clientProfileManager;
$this->normalizer = $normalizer;
}
public static function getSubscribedEvents()
{
return [
PostValidateListener::POST_VALIDATE_TRANSFORMATION => 'transform',
];
}
public function supportTransformation($payload)
{
return $payload instanceof UpdateClientProfile;
}
public function transform(ViewEvent $event)
{
/** @var UpdateClientProfile $payload */
$payload = $event->getControllerResult();
if (!$this->supportTransformation($payload)) {
return;
}
$clientProfile = $this->clientProfileManager->updateCurrentUserProfile(
$payload->name,
$payload->preferredLang,
$payload->timezone,
$payload->marketingAcceptance,
$payload->phoneNumber
);
$event->setResponse(new JsonResponse($this->normalizer->normalize($clientProfile, ClientProfileOutput::class)));
}
}