src/EventSubscriber/LivingCostSubmissionWriteSubscriber.php line 63

  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\LivingCostStatistics;
  4. use App\Entity\LivingCostSubmission;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Symfony\Component\HttpKernel\KernelEvents;
  7. use Symfony\Component\HttpKernel\Event\ViewEvent;
  8. use App\Repository\LivingCostStatisticsRepository;
  9. use App\LivingCosts\LivingCostStatisticsCalculator;
  10. use App\LivingCosts\LivingCostStatisticsOperations;
  11. use ApiPlatform\Symfony\EventListener\EventPriorities;
  12. use App\LivingCosts\LivingCostStatisticsOverallOperations;
  13. use App\Repository\LivingCostStatisticsOverallRepository;
  14. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  15. /**
  16.  * Subscribes to write operations.
  17.  * Used when a LivingCostSubmission is created, modified or deleted.
  18.  */
  19. final class LivingCostSubmissionWriteSubscriber implements EventSubscriberInterface
  20. {
  21.     /**
  22.      * Constructor.
  23.      *
  24.      * @param LivingCostStatisticsRepository $livingCostStatisticsRepository
  25.      * @param LivingCostStatisticsCalculator $livingCostStatisticsCalculator
  26.      * @param LivingCostStatisticsOperations $livingCostStatisticsOperations
  27.      */
  28.     public function __construct(
  29.         private LivingCostStatisticsRepository $livingCostStatisticsRepository,
  30.         private LivingCostStatisticsCalculator $livingCostStatisticsCalculator,
  31.         private LivingCostStatisticsOperations $livingCostStatisticsOperations,
  32.         private LivingCostStatisticsOverallOperations $livingCostStatisticsOverallOperations,
  33.         private LivingCostStatisticsOverallRepository $livingCostStatisticsOverallRepository,)
  34.     {
  35.     }
  36.     /**
  37.      * Returns which events are subscribed to.
  38.      *
  39.      * @return void
  40.      */
  41.     public static function getSubscribedEvents()
  42.     {
  43.         return [
  44.             KernelEvents::VIEW => [
  45.                 ['onLivingCostSubmissionDeleted'EventPriorities::PRE_WRITE],
  46.                 ['onLivingCostSubmissionCreatedOrUpdated'EventPriorities::PRE_WRITE],
  47.             ],
  48.         ];
  49.     }
  50.     /**
  51.      * Updates LivingCostStatistics with new / modified LivingCostSubmission data.
  52.      *
  53.      * @param ViewEvent $event
  54.      *
  55.      * @return void
  56.      */
  57.     public function onLivingCostSubmissionCreatedOrUpdated(ViewEvent $event): void
  58.     {
  59.         $livingCostSubmission $event->getControllerResult();
  60.         $method $event->getRequest()->getMethod();
  61.         if (!$livingCostSubmission instanceof LivingCostSubmission
  62.             || !in_array(
  63.                 $method,
  64.                 [
  65.                     Request::METHOD_POST,
  66.                     Request::METHOD_PATCH,
  67.                     Request::METHOD_PUT,
  68.                 ]
  69.             )
  70.         ) {
  71.             return;
  72.         }
  73.         $livingCostStatistics $this->livingCostStatisticsOperations->handleNewSubmission($livingCostSubmission);
  74.         $this->livingCostStatisticsRepository->save($livingCostStatisticstrue);
  75.         $livingCostStatisticsOverall $this->livingCostStatisticsOverallOperations->handleNewSubmission();
  76.         $this->livingCostStatisticsOverallRepository->save($livingCostStatisticsOverall);
  77.     }
  78.     /**
  79.      * Handles if a LivingCostSubmission is deleted.
  80.      *
  81.      * @param ViewEvent $event
  82.      *
  83.      * @return void
  84.      */
  85.     public function onLivingCostSubmissionDeleted(ViewEvent $event): void
  86.     {
  87.         $livingCostSubmission $event->getControllerResult();
  88.         $method $event->getRequest()->getMethod();
  89.         if (!$livingCostSubmission instanceof LivingCostSubmission
  90.             || Request::METHOD_DELETE !== $method
  91.         ) {
  92.             return;
  93.         }
  94.         $this->livingCostStatisticsOperations->handleDeleteSubmission($livingCostSubmission);
  95.         $livingCostStatisticsOverall $this->livingCostStatisticsOverallOperations->handleDeleteSubmission();
  96.         $this->livingCostStatisticsOverallRepository->save($livingCostStatisticsOveralltrue);
  97.     }
  98. }