src/EventSubscriber/ItemPriceFormatTransformerEventSubscriber.php line 33

  1. <?php
  2. declare(strict_types=1);
  3. namespace App\EventSubscriber;
  4. use ApiPlatform\Core\EventListener\EventPriorities;
  5. use App\DataTransformer\CurrencyDataTransformer;
  6. use App\Entity\Item;
  7. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Symfony\Component\HttpKernel\Event\ViewEvent;
  10. use Symfony\Component\HttpKernel\KernelEvents;
  11. final class ItemPriceFormatTransformerEventSubscriber implements EventSubscriberInterface
  12. {
  13.     private array $allowedEditableMethods = [
  14.         Request::METHOD_POST,
  15.         Request::METHOD_PUT
  16.     ];
  17.     public function __construct(private readonly CurrencyDataTransformer $currencyDataTransformer)
  18.     {
  19.     }
  20.     public static function getSubscribedEvents(): array
  21.     {
  22.         return [
  23.             KernelEvents::VIEW => ['reverseTransformPrice'EventPriorities::PRE_WRITE]
  24.         ];
  25.     }
  26.     public function reverseTransformPrice(ViewEvent $event): void
  27.     {
  28.         $entity $event->getControllerResult();
  29.         if (
  30.             !$entity instanceof Item
  31.             ||
  32.             !in_array($event->getRequest()->getMethod(), $this->allowedEditableMethods)
  33.         ) {
  34.             return;
  35.         }
  36.         $entity
  37.             ->setBudget(
  38.                 $this->currencyDataTransformer->reverseTransform($entity->getRealBudget())
  39.             )
  40.             ->setExternalBudget(
  41.                 $this->currencyDataTransformer->reverseTransform($entity->getRealExternalBudget())
  42.             );
  43.     }
  44. }