src/EventListener/RedisUploadSubscriber.php line 44

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use App\Atd\Domain\Datastore\Redis\DataScoreUpdateDto;
  4. use App\Atd\Domain\Datastore\Redis\DataScoreUpdateDtoFactory;
  5. use App\Atd\Utilities\CalendarToDataScoreDtoAdapter;
  6. use App\enum\Events;
  7. use App\Event\CacheDataEvent;
  8. use App\Atd\Domain\Datastore\Redis\Service\RedisDatastoreService;
  9. use App\Service\ProviderFactoryService;
  10. use App\Atd\Domain\Datastore\Redis\DataScoreDto;
  11. use Psr\EventDispatcher\EventDispatcherInterface;
  12. use Psr\Log\LoggerInterface;
  13. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  14. use Throwable;
  15. class RedisUploadSubscriber implements EventSubscriberInterface
  16. {
  17.     use CalendarToDataScoreDtoAdapter;
  18.     public function __construct(
  19.         private ProviderFactoryService $providerFactory,
  20.         private RedisDatastoreService $redisDatastoreService,
  21.         private LoggerInterface $logger
  22.     ){}
  23.     /**
  24.      * @return string[]
  25.      */
  26.     public static function getSubscribedEvents(): array
  27.     {
  28.         return [
  29.             Events::CACHE_DATA_TRIGGER => 'onCacheUpdateTriggered'
  30.         ];
  31.     }
  32.     /**
  33.      * @param CacheDataEvent $event
  34.      * @return void
  35.      * @throws Throwable
  36.      */
  37.     public function onCacheUpdateTriggered(CacheDataEvent $event): void
  38.     {
  39.         try {
  40.             $storageKey $event->getStorageKey();
  41.             $maxScore $event->getMaxScore();
  42.             $minScore $event->getMinScore();
  43.             $dataScoreDto $this->getDataScoreDto(
  44.                 $event->getData()
  45.             );
  46.             $dataScoreUpdateDto = new DataScoreUpdateDto([
  47.                 'storageKey'          => $storageKey->getKey(),
  48.                 'maxScore'            => $maxScore,
  49.                 'minScore'            => $minScore,
  50.                 'dataScoreCollection' => $dataScoreDto
  51.             ]);
  52.             $this->redisDatastoreService->eventUpdate(
  53.                 $dataScoreUpdateDto
  54.             );
  55.         } catch (Throwable $e) {
  56.             $this->logger->error($e->getMessage());
  57.             throw $e;
  58.         }
  59.     }
  60.     /**
  61.      * @param array $setData
  62.      * @return array
  63.      */
  64.     private function getDataScoreDto(array $setData): array
  65.     {
  66.         return $this->adaptCalendarToDataScoreDto($setData);
  67.     }
  68. }