src/EventSubscriber/ClearCalendarCacheSubscriber.php line 71

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Harmonizely\EventSubscriber;
  4. use Harmonizely\CalendarEvents;
  5. use Harmonizely\Model\EventInterface;
  6. use Harmonizely\Service\Cache\Contract\IClearCalendarCacheService;
  7. use Harmonizely\Service\Cache\Contract\IGetCalendarCacheTagService;
  8. use Psr\Cache\InvalidArgumentException;
  9. use Psr\Log\LoggerInterface;
  10. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  11. use Symfony\Component\EventDispatcher\GenericEvent;
  12. use Symfony\Contracts\Cache\TagAwareCacheInterface;
  13. /**
  14.  * Class ClearCalendarCacheSubscriber
  15.  * @package Harmonizely\EventSubscriber
  16.  */
  17. final class ClearCalendarCacheSubscriber implements EventSubscriberInterface
  18. {
  19.     /**
  20.      * @var TagAwareCacheInterface
  21.      */
  22.     private TagAwareCacheInterface $cache;
  23.     /**
  24.      * @var LoggerInterface
  25.      */
  26.     private LoggerInterface $logger;
  27.     /**
  28.      * @var IClearCalendarCacheService
  29.      */
  30.     private IClearCalendarCacheService $clearCalendarCacheService;
  31.     /**
  32.      * @param TagAwareCacheInterface $cache
  33.      * @param LoggerInterface $logger
  34.      * @param IClearCalendarCacheService $clearCalendarCacheService
  35.      */
  36.     public function __construct(
  37.         TagAwareCacheInterface $cache,
  38.         LoggerInterface $logger,
  39.         IClearCalendarCacheService $clearCalendarCacheService
  40.     )
  41.     {
  42.         $this->cache $cache;
  43.         $this->logger $logger;
  44.         $this->clearCalendarCacheService $clearCalendarCacheService;
  45.     }
  46.     /**
  47.      * @return string[]
  48.      */
  49.     public static function getSubscribedEvents(): array
  50.     {
  51.         return [
  52.             CalendarEvents::EVENT_POST_CANCEL => 'clearCache',
  53.             CalendarEvents::EVENT_POST_CREATE => 'clearCache',
  54.             CalendarEvents::EVENT_POST_RESCHEDULE => 'clearCache',
  55.         ];
  56.     }
  57.     /**
  58.      * @param GenericEvent $genericEvent
  59.      */
  60.     public function clearCache(GenericEvent $genericEvent): void
  61.     {
  62.         try {
  63.             /** @var EventInterface $event */
  64.             $event $genericEvent->getSubject();
  65.             $this->clearCalendarCacheService->perform($event->getCalendar()->getCalendarAccount());
  66.         } catch (InvalidArgumentException $e) {
  67.             $this->logger->critical($e->getMessage());
  68.         }
  69.     }
  70. }