Keep pregame lobby chat open for an hour after the game ends

The chat used to disappear the moment a session left CREATED status.
Sessions now record a finishedAt timestamp when they're won or lost,
and the lobby (with chat) stays reachable via /game/{session} for an
hour afterward instead of immediately redirecting to the win/lose
feedback page. The lobby template shows a distinct "game finished"
header with a link to that feedback page during this window.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Frank
2026-08-10 16:47:57 +02:00
co-authored by Claude Sonnet 5
parent 846cfbc44a
commit 2bfc2aca1a
8 changed files with 112 additions and 26 deletions
@@ -35,6 +35,7 @@ final class GameAdminSessionController extends AbstractController
}
$session->setStatus(SessionStatus::LOST);
$session->setFinishedAt(new \DateTime());
$em->flush();
$this->addFlash('success', sprintf('Session #%d closed.', $session->getId()));
@@ -43,6 +43,7 @@ final class GameApiController extends AbstractController
if ($session->getStatus() === SessionStatus::PLAYING) {
if ($session->getTimer() !== null && $now >= $session->getTimer()) {
$session->setStatus(SessionStatus::LOST);
$session->setFinishedAt(new \DateTime());
$this->entityManager->persist($session);
$this->entityManager->flush();
$isFinished = true;
+1 -1
View File
@@ -149,7 +149,7 @@ final class GameController extends AbstractController
// Lazily pick up readiness changes from other players since our last request
$dashboardService->checkAllPlayersReady($session);
if ($session->getStatus() === SessionStatus::CREATED) {
if ($dashboardService->isLobbyChatOpen($session)) {
return $this->render('game/lobby.html.twig', [
'session' => $session,
'messages' => $dashboardService->getLobbyMessages($session),