src/EventSubscriber/LivingCostStatisticsReadSubscriber.php line 65
<?phpnamespace App\EventSubscriber;use App\GeneralMetrics\GeneralMetricsOperations;use App\CityMetrics\CityMetricsOperations;use App\Entity\LivingCostStatistics;use App\Repository\CityMetricsRepository;use App\Repository\GeneralMetricsRepository;use Symfony\Component\HttpFoundation\Request;use Symfony\Component\HttpKernel\KernelEvents;use Symfony\Component\HttpKernel\Event\ViewEvent;use ApiPlatform\Symfony\EventListener\EventPriorities;use Symfony\Component\EventDispatcher\EventSubscriberInterface;/*** Subscribes to reading of a LivingCostStatistics entity.* Happens in GET operations in this system's case.*/final class LivingCostStatisticsReadSubscriber implements EventSubscriberInterface{/*** Constructor.** @param GeneralMetricsRepository $generalMetricsRepository* @param CityMetricsRepository $cityMetricsRepository* @param GeneralMetricsOperations $generalMetricsOperations* @param CityMetricsOperations $cityMetricsOperations*/public function __construct(private GeneralMetricsRepository $generalMetricsRepository,private CityMetricsRepository $cityMetricsRepository,private GeneralMetricsOperations $generalMetricsOperations,private CityMetricsOperations $cityMetricsOperations) {}/*** Returns which events are subscribed to.** @return void*/public static function getSubscribedEvents(){return [KernelEvents::VIEW => [['onRead', EventPriorities::PRE_SERIALIZE],],];}/*** Increments metrics data when an entity is read.* - CityMetrics if a LivingCostStatistics entity is read for a specific City* - GeneralMetrics if any LivingCostStatistics entity is read** @param ViewEvent $event** @return void*/public function onRead(ViewEvent $event): void{$request = $event->getRequest();$apiMetricsPath = $request->attributes->get('_route_params')['_api_operation_name'];$method = $request->getMethod();if (LivingCostStatistics::GET_RESOURCE_PATH != $apiMetricsPath&& LivingCostStatistics::GET_COLLECTION_PATH != $apiMetricsPath|| !in_array($method, [Request::METHOD_GET])) {return;}if (LivingCostStatistics::GET_RESOURCE_PATH == $apiMetricsPath) {$resources[] = $event->getControllerResult();} else {$resources = $event->getControllerResult();}foreach ($resources as $resource) {$cityMetrics = $this->cityMetricsOperations->incrementForLivingCostStatistics($resource);$this->cityMetricsRepository->save($cityMetrics, true);$generalMetrics = $this->generalMetricsOperations->increment();$this->generalMetricsRepository->save($generalMetrics, true);}}}