src/Subscriber/Search/MemberSearchSubscriber.php line 92

Open in your IDE?
  1. <?php
  2. /*
  3.  * Author: Dominik Piekarski <code@dompie.de>
  4.  * Created at: 2020/10/01 16:23
  5.  */
  6. declare(strict_types=1);
  7. namespace App\Subscriber\Search;
  8. use App\Event\User\AccountStatusChangeEvent;
  9. use App\Event\User\AmateurUpdateEvent;
  10. use App\Event\User\AmateurUpgradeCompleteEvent;
  11. use App\Event\User\LoginCreatedEvent;
  12. use App\Event\User\LogoutEvent;
  13. use App\Service\Search\MemberSearchService;
  14. use Elasticsearch\Common\Exceptions\Missing404Exception;
  15. use Psr\Log\LoggerInterface;
  16. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  17. class MemberSearchSubscriber implements EventSubscriberInterface
  18. {
  19.     protected MemberSearchService $amateurSearch;
  20.     protected bool $enabled false;
  21.     protected LoggerInterface $logger;
  22.     public function __construct(MemberSearchService $amateurSearchLoggerInterface $appLogger)
  23.     {
  24.         $this->amateurSearch $amateurSearch;
  25.         $this->enabled = (bool) (getenv($_ENV['REALTIME_MEMBER_SEARCH']) ?? false);
  26.         $this->logger $appLogger;
  27.     }
  28.     public function enable(): void
  29.     {
  30.         $this->enabled true;
  31.     }
  32.     public static function getSubscribedEvents(): array
  33.     {
  34.         return [
  35.             AmateurUpdateEvent::class => [['onAmateurUpdateIndex'0]],
  36.             AmateurUpgradeCompleteEvent::class => [['onNewAmateurUpdateIndex'0]],
  37.             AccountStatusChangeEvent::class => [['onAccountStatusChangeUpdateIndex'0]],
  38.             LoginCreatedEvent::class => [['onLoginUpdateIndex'0]],
  39.             LogoutEvent::class => [['onLogoutUpdateIndex'0]],
  40.         ];
  41.     }
  42.     public function onAmateurUpdateIndex(AmateurUpdateEvent $event)
  43.     {
  44.         if (false === $event->getEntity()->getIsAmateur()) {
  45.             return;
  46.         }
  47.         $this->amateurSearch->updateOrInsert($event->getEntity());
  48.     }
  49.     public function onLoginUpdateIndex(LoginCreatedEvent $event): void
  50.     {
  51.         if (!$this->enabled) {
  52.             return;
  53.         }
  54.         $account $event->getLogin()->getAccount();
  55.         if (null === $account || null === $account->getMember()) {
  56.             return;
  57.         }
  58.         $this->amateurSearch->updateOrInsert($account->getMember());
  59.     }
  60.     public function onLogoutUpdateIndex(LogoutEvent $event): void
  61.     {
  62.         if (!$this->enabled) {
  63.             return;
  64.         }
  65.         $member $event->getAccount()->getMember();
  66.         if (null === $member) {
  67.             return;
  68.         }
  69.         $this->amateurSearch->updateOrInsert($member);
  70.     }
  71.     public function onNewAmateurUpdateIndex(AmateurUpgradeCompleteEvent $event): void
  72.     {
  73.         if (!$this->enabled) {
  74.             return;
  75.         }
  76.         if (null === $event->getAmateurUpgrade()->getAccount() || !$event->getAmateurUpgrade()->getAccount()->hasMember()) {
  77.             return;
  78.         }
  79.         $this->amateurSearch->updateOrInsert($event->getAmateurUpgrade()->getAccount()->getMember(), true);
  80.     }
  81.     public function onAccountStatusChangeUpdateIndex(AccountStatusChangeEvent $event): void
  82.     {
  83.         if (!$this->enabled) {
  84.             return;
  85.         }
  86.         $member $event->getAccount()->getMember();
  87.         if (!$member) {
  88.             return;
  89.         }
  90.         try {
  91.             if ($event->gotBlocked()) {
  92.                 $this->amateurSearch->removeById($member->getId(), true);
  93.             }
  94.             if ($event->gotReenabled()) {
  95.                 $this->amateurSearch->updateOrInsert($member);
  96.             }
  97.         } catch (Missing404Exception $e) {
  98.             $this->logger->error($e->getMessage().PHP_EOL.$e->getTraceAsString());
  99.         }
  100.     }
  101. }