<?php
namespace App\EventSubscriber\Tournament;
use App\Entity\Notification;
use App\Entity\Player;
use App\Event\Tournament\TournamentRegistrationOpenedEvent;
use App\Message\CreateNotificationMessage;
use App\Repository\PlayerRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Messenger\MessageBusInterface;
class TournamentRegistrationOpenedEventSubscriber implements EventSubscriberInterface
{
public function __construct(
private PlayerRepository $playerRepository, private MessageBusInterface $bus
) {
}
public function onTournamentRegistrationOpenedEvent(TournamentRegistrationOpenedEvent $tournamentEndedEvent): void
{
$tournament = $tournamentEndedEvent->getTournament();
$players = $this->playerRepository->findNonDeletedPlayers();
$playerIdsCollection = (new ArrayCollection($players))
->map(function (Player $player) {
return $player->getId();
})
;
$this->bus->dispatch(new CreateNotificationMessage(
$playerIdsCollection->toArray(),
Notification::TOURNAMENT_OPEN_FOR_REGISTRATION,
sprintf(
'Nouveau tournoi disponible : %s ! Les inscriptions sont ouvertes !',
$tournament->getName()
),
['tournamentId' => $tournament->getId()]
));
}
public static function getSubscribedEvents(): array
{
return [
TournamentRegistrationOpenedEvent::class => 'onTournamentRegistrationOpenedEvent',
];
}
}