<?php
namespace App\Jockeyexchange\EventSubscriber;
use App\Jockeyexchange\Event\JockeyexchangeRacedayAttendEvent;
use App\Jockeyexchange\Event\JockeyexchangeRacedayAttendEvents;
use App\Jockeyexchange\Service\JockeyexchangeService;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\Mercure\HubInterface;
use Symfony\Component\Mercure\Update;
class JockeyexchangeMercureSubscriber implements EventSubscriberInterface
{
public function __construct(
protected HubInterface $hub,
protected \Twig\Environment $twig,
protected RequestStack $requestStack,
protected JockeyexchangeService $jockeyexchangeService
) {
}
public static function getSubscribedEvents()
{
return [
JockeyexchangeRacedayAttendEvents::RACEDAY_ATTEND => 'racedayAttend',
// JockeyexchangeRacedayAttendEvents::RACEDAY_CANCEL => 'racedayCancel',
// JockeyexchangeRacedayAttendEvents::RACE_ATTEND => 'raceAttend',
// JockeyexchangeRacedayAttendEvents::RACE_CANCEL => 'raceCancel',
];
}
public function racedayAttend(JockeyexchangeRacedayAttendEvent $event)
{
$raceday = $event->getRaceday();
$attendedRaces = $event->getAttendedRaces();
$profile = $event->getProfile();
$racedayAttendees = $this->jockeyexchangeService->getOtherJockeyRacedayAttendees($raceday);
$html = $this->twig->render('/jockeyexchange/streams/raceday_list_stream.html.twig', [
'raceday' => $raceday,
'user' => $profile,
'otherRacedayAttendees' => $racedayAttendees,
]);
$this->hub->publish(new Update(sprintf($event->getTopic(), $profile->getId()), $html, false));
}
}