From a6b3a93d5ce79c7066c342212e3a8b8f93e66017 Mon Sep 17 00:00:00 2001 From: thibaud-leclere Date: Mon, 30 Mar 2026 19:46:12 +0200 Subject: [PATCH] refactor: use persisted games in HomepageController --- src/Controller/HomepageController.php | 91 ++++++++++----------------- 1 file changed, 34 insertions(+), 57 deletions(-) diff --git a/src/Controller/HomepageController.php b/src/Controller/HomepageController.php index 547ea6a..37689bf 100644 --- a/src/Controller/HomepageController.php +++ b/src/Controller/HomepageController.php @@ -4,77 +4,54 @@ declare(strict_types=1); namespace App\Controller; -use App\Gateway\TMDBGateway; -use App\Repository\ActorRepository; -use App\Repository\MovieRepository; +use App\Entity\Game; +use App\Entity\User; +use App\Repository\GameRepository; +use App\Service\GameGridGenerator; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; +use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; -use Symfony\Component\Serializer\SerializerInterface; class HomepageController extends AbstractController { - public function __construct( - private readonly ActorRepository $actorRepository - ) {} - #[Route('/', name: 'app_homepage')] - public function index(SerializerInterface $serializer): Response - { - // Final actor to be guessed - $mainActor = $this->actorRepository->findOneRandom(4); + public function index( + Request $request, + GameRepository $gameRepository, + GameGridGenerator $gridGenerator, + ): Response { + /** @var User|null $user */ + $user = $this->getUser(); - // Actors for the grid - $actors = []; - $leftSize = 0; - $rightSize = 0; - foreach (str_split(strtolower($mainActor->getName())) as $char) { - if (!preg_match('/[a-z]/', $char)) { - continue; + $game = null; + + if ($user) { + $game = $gameRepository->findActiveForUser($user); + } else { + $gameId = $request->getSession()->get('current_game_id'); + if ($gameId) { + $game = $gameRepository->find($gameId); + if (!$game || $game->getStatus() !== Game::STATUS_IN_PROGRESS) { + $request->getSession()->remove('current_game_id'); + $game = null; + } } - - $tryFindActor = 0; - do { - $actor = $this->actorRepository->findOneRandom(4, $char); - ++$tryFindActor; - } while ( - $actor === $mainActor - || in_array($actor, array_map(fn ($actorMap) => $actorMap['actor'], $actors)) - || $tryFindActor < 5 - ); - - $actorData = [ - 'actor' => $actor, - 'pos' => strpos($actor->getName(), $char), - ]; - - if ($leftSize < $actorData['pos']) { - $leftSize = $actorData['pos']; - } - - $rightSizeActor = strlen($actor->getName()) - $actorData['pos'] - 1; - if ($rightSize < $rightSizeActor) { - $rightSize = $rightSizeActor; - } - - $actors[] = $actorData; } - // Predict grid size - $width = $rightSize + $leftSize + 1; - $middle = $leftSize; + if (!$game) { + return $this->render('homepage/index.html.twig', [ + 'game' => null, + ]); + } - // Build JSON-serializable grid for React - $grid = array_map(fn (array $actorData) => [ - 'actorName' => $actorData['actor']->getName(), - 'actorId' => $actorData['actor']->getId(), - 'pos' => $actorData['pos'], - ], $actors); + $gridData = $gridGenerator->computeGridData($game); return $this->render('homepage/index.html.twig', [ - 'grid' => $grid, - 'width' => $width, - 'middle' => $middle, + 'game' => $game, + 'grid' => $gridData['grid'], + 'width' => $gridData['width'], + 'middle' => $gridData['middle'], ]); } }