src/EventListener/PostValidate/UpdateContactPostValidateTransformation.php line 56

Open in your IDE?
  1. <?php
  2. namespace App\EventListener\PostValidate;
  3. use App\DTO\Contact\ContactOutput;
  4. use App\DTO\Contact\UpdateContact;
  5. use App\Entity\Contact;
  6. use App\Service\AfterReadStorage;
  7. use App\Service\Manager\ContactManager;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. use Symfony\Component\HttpFoundation\JsonResponse;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use Symfony\Component\HttpKernel\Event\ViewEvent;
  12. use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
  13. class UpdateContactPostValidateTransformation implements EventSubscriberInterface
  14. {
  15.     /**
  16.      * @var AfterReadStorage
  17.      */
  18.     private $afterReadStorage;
  19.     /**
  20.      * @var ContactManager
  21.      */
  22.     private $contactManager;
  23.     /**
  24.      * @var NormalizerInterface
  25.      */
  26.     private $normalizer;
  27.     public function __construct(
  28.         AfterReadStorage $afterReadStorage,
  29.         ContactManager $contactManager,
  30.         NormalizerInterface $normalizer
  31.     ) {
  32.         $this->afterReadStorage $afterReadStorage;
  33.         $this->contactManager $contactManager;
  34.         $this->normalizer $normalizer;
  35.     }
  36.     public static function getSubscribedEvents()
  37.     {
  38.         return [
  39.             PostValidateListener::POST_VALIDATE_TRANSFORMATION => 'transform',
  40.         ];
  41.     }
  42.     public function supportTransformation($payloadRequest $request)
  43.     {
  44.         return $payload instanceof UpdateContact && $request->isMethod($request::METHOD_PUT);
  45.     }
  46.     /**
  47.      * @param ViewEvent $event
  48.      */
  49.     public function transform(ViewEvent $event)
  50.     {
  51.         /** @var UpdateContact $payload */
  52.         $payload $event->getControllerResult();
  53.         if (!$this->supportTransformation($payload$event->getRequest())) {
  54.             return;
  55.         }
  56.         /** @var Contact $contact */
  57.         $contact $this->afterReadStorage->getObject();
  58.         $contact->setName($payload->name);
  59.         $contact->updateItems([
  60.             'email' => $payload->email,
  61.             'emailSource' => $payload->emailSource,
  62.             'emailObtainedAt' => $payload->emailObtainedAt,
  63.             'phone' => $payload->phone,
  64.             'phoneSource' => $payload->phoneSource,
  65.             'phoneObtainedAt' => $payload->phoneObtainedAt,
  66.         ]);
  67.         $this->contactManager->save($contact);
  68.         $event->setResponse(new JsonResponse($this->normalizer->normalize($contactContactOutput::class)));
  69.     }
  70. }