DeckResource::collection( $this->roomCreation->availableDecks($request->user()), )->resolve($request), 'defaultPlayerName' => $request->user()?->name, ]); } public function store(StoreRoomRequest $request): RedirectResponse { /** @var array{deck_id: int, player_name: string, title?: string|null} $validated */ $validated = $request->validated(); [$room, $player] = $this->roomCreation->create( $validated, $request->user(), ); $request->session()->put( "room_players.{$room->id}", $player->id, ); $redirect = to_route('room.show', $room); if ($request->user() === null) { $redirect->with('room_notice', [ 'guest_retention_days' => config('rooms.guest_retention_days'), 'account_retention_days' => config('rooms.account_retention_days'), ]); } return $redirect; } public function show(Room $room, Request $request): Response { $currentPlayer = $request->attributes->get('currentPlayer'); abort_unless($currentPlayer instanceof Player, 403); $pageData = $this->roomPage->prepare( $room, $currentPlayer, $request->user(), ); return Inertia::render('rooms/Show', [ 'room' => (new RoomResource($pageData))->resolve($request), 'currentPlayer' => (new CurrentPlayerResource($pageData))->resolve($request), ]); } }