src/EventSubscriber/LivingCostSubmissionWriteSubscriber.php line 63
<?php
namespace 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);
}
}