<?php
namespace App\EventSubscriber\Tournament;
use App\Entity\Tournament;
use App\Event\Tournament\TournamentPlayerRegisteredEvent;
use App\Event\Tournament\TournamentRegistrationClosedEvent;
use App\Helper\TournamentHelper;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
class TournamentPlayerRegisteredEventSubscriber implements EventSubscriberInterface
{
public function __construct(
private EntityManagerInterface $entityManager, private EventDispatcherInterface $eventDispatcher
) {
}
public function onTournamentPlayerRegisteredEvent(TournamentPlayerRegisteredEvent $tournamentPlayerRegisteredEvent): void
{
$tournament = $tournamentPlayerRegisteredEvent->getTournament();
// the tournament is still open (not full) so we don't need to go further
if (TournamentHelper::isRegistrationOpen($tournament)) {
return;
}
$tournament
->setStatus(Tournament::REGISTRATION_CLOSED_STATUS)
;
$this->entityManager->flush();
$this->eventDispatcher->dispatch(new TournamentRegistrationClosedEvent($tournament));
}
public static function getSubscribedEvents(): array
{
return [
TournamentPlayerRegisteredEvent::class => 'onTournamentPlayerRegisteredEvent',
];
}
}