src/EventSubscriber/Tournament/TournamentRegistrationOpenedEventSubscriber.php line 21

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber\Tournament;
  3. use App\Entity\Notification;
  4. use App\Entity\Player;
  5. use App\Event\Tournament\TournamentRegistrationOpenedEvent;
  6. use App\Message\CreateNotificationMessage;
  7. use App\Repository\PlayerRepository;
  8. use Doctrine\Common\Collections\ArrayCollection;
  9. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  10. use Symfony\Component\Messenger\MessageBusInterface;
  11. class TournamentRegistrationOpenedEventSubscriber implements EventSubscriberInterface
  12. {
  13.     public function __construct(
  14.         private PlayerRepository $playerRepository, private MessageBusInterface $bus
  15.     ) {
  16.     }
  17.     public function onTournamentRegistrationOpenedEvent(TournamentRegistrationOpenedEvent $tournamentEndedEvent): void
  18.     {
  19.         $tournament $tournamentEndedEvent->getTournament();
  20.         $players $this->playerRepository->findNonDeletedPlayers();
  21.         $playerIdsCollection = (new ArrayCollection($players))
  22.             ->map(function (Player $player) {
  23.                 return $player->getId();
  24.             })
  25.         ;
  26.         $this->bus->dispatch(new CreateNotificationMessage(
  27.             $playerIdsCollection->toArray(),
  28.             Notification::TOURNAMENT_OPEN_FOR_REGISTRATION,
  29.             sprintf(
  30.                 'Nouveau tournoi disponible : %s ! Les inscriptions sont ouvertes !',
  31.                 $tournament->getName()
  32.             ),
  33.             ['tournamentId' => $tournament->getId()]
  34.         ));
  35.     }
  36.     public static function getSubscribedEvents(): array
  37.     {
  38.         return [
  39.             TournamentRegistrationOpenedEvent::class => 'onTournamentRegistrationOpenedEvent',
  40.         ];
  41.     }
  42. }