src/EventSubscriber/InvalidateCacheSubscriber.php line 39

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Event\CreateIndustrialSiteEvent;
  4. use App\Event\DeleteOrganizationEvent;
  5. use App\Event\IndustrialSiteEventInterface;
  6. use App\Event\OrganizationEventInterface;
  7. use App\Event\UpdateIndustrialSiteEvent;
  8. use App\Event\UpdateOrganizationEvent;
  9. use App\Event\UpdateContractEvent;
  10. use Lexik\Bundle\JWTAuthenticationBundle\Events;
  11. use Psr\Cache\InvalidArgumentException;
  12. use Psr\Log\LoggerInterface;
  13. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  14. use Symfony\Contracts\Cache\TagAwareCacheInterface;
  15. class InvalidateCacheSubscriber implements EventSubscriberInterface
  16. {
  17.     private TagAwareCacheInterface $portailCachePool;
  18.     private LoggerInterface $logger;
  19.     public function __construct(TagAwareCacheInterface $portailCachePoolLoggerInterface $logger)
  20.     {
  21.         $this->portailCachePool $portailCachePool;
  22.         $this->logger $logger;
  23.     }
  24.     public static function getSubscribedEvents()
  25.     {
  26.         return [
  27.             UpdateOrganizationEvent::NAME => 'onUpdateOrganization',
  28.             DeleteOrganizationEvent::NAME => 'onDeleteOrganization',
  29.             UpdateContractEvent::NAME => 'onUpdateContract',
  30.             Events::JWT_CREATED => 'onUserLogin',
  31.         ];
  32.     }
  33.     public function onUpdateOrganization(OrganizationEventInterface $event): void
  34.     {
  35.         $organizationId $event->getOrganization()->getId();
  36.         $this->invalidateTag($organizationId"organization '$organizationId'");
  37.     }
  38.     public function onUpdateContract(UpdateContractEvent $event): void
  39.     {
  40.         $contractId $event->getContract()->getId();
  41.         $this->invalidateTag($contractId"contract '$contractId'");
  42.     }
  43.     public function onDeleteOrganization(OrganizationEventInterface $event): void
  44.     {
  45.         $organizationId $event->getOrganization()->getId();
  46.         $this->invalidateTag($organizationId"organization '$organizationId'");
  47.     }
  48.     public function onUserLogin($event): void
  49.     {
  50.         $userId $event->getData()['heimdallId'] ?? null;
  51.         if (null !== $userId) {
  52.             $this->invalidateTag($userId"user '$userId'");
  53.         }
  54.     }
  55.     private function invalidateTag(string $tagNamestring $message): void
  56.     {
  57.         try {
  58.             $this->portailCachePool->invalidateTags([$tagName]);
  59.         } catch (InvalidArgumentException $e) {
  60.             $this->logger->error(sprintf('Cannot invalidate cache for %s on tag "%s"'$message$tagName));
  61.         }
  62.     }
  63. }