src/EventSubscriber/LivingCostSubmissionWriteSubscriber.php line 63
<?phpnamespace App\EventSubscriber;use App\Entity\LivingCostStatistics;use App\Entity\LivingCostSubmission;use Symfony\Component\HttpFoundation\Request;use Symfony\Component\HttpKernel\KernelEvents;use Symfony\Component\HttpKernel\Event\ViewEvent;use App\Repository\LivingCostStatisticsRepository;use App\LivingCosts\LivingCostStatisticsCalculator;use App\LivingCosts\LivingCostStatisticsOperations;use ApiPlatform\Symfony\EventListener\EventPriorities;use App\LivingCosts\LivingCostStatisticsOverallOperations;use App\Repository\LivingCostStatisticsOverallRepository;use Symfony\Component\EventDispatcher\EventSubscriberInterface;/*** Subscribes to write operations.* Used when a LivingCostSubmission is created, modified or deleted.*/final class LivingCostSubmissionWriteSubscriber implements EventSubscriberInterface{/*** Constructor.** @param LivingCostStatisticsRepository $livingCostStatisticsRepository* @param LivingCostStatisticsCalculator $livingCostStatisticsCalculator* @param LivingCostStatisticsOperations $livingCostStatisticsOperations*/public function __construct(private LivingCostStatisticsRepository $livingCostStatisticsRepository,private LivingCostStatisticsCalculator $livingCostStatisticsCalculator,private LivingCostStatisticsOperations $livingCostStatisticsOperations,private LivingCostStatisticsOverallOperations $livingCostStatisticsOverallOperations,private LivingCostStatisticsOverallRepository $livingCostStatisticsOverallRepository,){}/*** Returns which events are subscribed to.** @return void*/public static function getSubscribedEvents(){return [KernelEvents::VIEW => [['onLivingCostSubmissionDeleted', EventPriorities::PRE_WRITE],['onLivingCostSubmissionCreatedOrUpdated', EventPriorities::PRE_WRITE],],];}/*** Updates LivingCostStatistics with new / modified LivingCostSubmission data.** @param ViewEvent $event** @return void*/public function onLivingCostSubmissionCreatedOrUpdated(ViewEvent $event): void{$livingCostSubmission = $event->getControllerResult();$method = $event->getRequest()->getMethod();if (!$livingCostSubmission instanceof LivingCostSubmission|| !in_array($method,[Request::METHOD_POST,Request::METHOD_PATCH,Request::METHOD_PUT,])) {return;}$livingCostStatistics = $this->livingCostStatisticsOperations->handleNewSubmission($livingCostSubmission);$this->livingCostStatisticsRepository->save($livingCostStatistics, true);$livingCostStatisticsOverall = $this->livingCostStatisticsOverallOperations->handleNewSubmission();$this->livingCostStatisticsOverallRepository->save($livingCostStatisticsOverall);}/*** Handles if a LivingCostSubmission is deleted.** @param ViewEvent $event** @return void*/public function onLivingCostSubmissionDeleted(ViewEvent $event): void{$livingCostSubmission = $event->getControllerResult();$method = $event->getRequest()->getMethod();if (!$livingCostSubmission instanceof LivingCostSubmission|| Request::METHOD_DELETE !== $method) {return;}$this->livingCostStatisticsOperations->handleDeleteSubmission($livingCostSubmission);$livingCostStatisticsOverall = $this->livingCostStatisticsOverallOperations->handleDeleteSubmission();$this->livingCostStatisticsOverallRepository->save($livingCostStatisticsOverall, true);}}