route('room'); if (! $room instanceof Room) { abort(404); } $sessionKey = "room_players.{$room->id}"; if ($room->trashed()) { $request->session()->forget($sessionKey); Inertia::flash('toast', [ 'type' => 'info', 'message' => 'Dieser Raum wurde gelöscht.', ]); return to_route('home'); } if ($room->isClosed()) { return to_route('room.join', [ 'join_code' => $room->join_code, ])->withErrors([ 'join_code' => 'Dieser Raum ist geschlossen.', ]); } $playerId = $request->session()->get($sessionKey); $player = $playerId ? $room->players()->find($playerId) : null; if ($player === null && $playerId) { $request->session()->forget($sessionKey); } if ($player === null && $request->user() !== null) { $player = $room->players() ->where('user_id', $request->user()->id) ->first(); if ($player !== null) { $request->session()->put($sessionKey, $player->id); } } if ($player === null) { return to_route('room.join', [ 'join_code' => $room->join_code, ])->withErrors([ 'join_code' => 'Du musst diesem Raum erst beitreten.', ]); } $request->attributes->set('currentPlayer', $player); return $next($request); } }