feat: some fixes to the ui, imlemented user and guest user, ans used the dahboard

This commit is contained in:
2026-08-16 16:24:25 +02:00
parent 4639baa9ae
commit 50e9fbd0b0
37 changed files with 1657 additions and 194 deletions
+50 -8
View File
@@ -3,23 +3,51 @@
namespace App\Http\Controllers;
use App\Http\Requests\JoinRoomRequest;
use App\Models\Player;
use App\Models\Room;
use Illuminate\Http\RedirectResponse;
use Illuminate\Support\Facades\DB;
use Illuminate\Validation\ValidationException;
class RoomPlayerController extends Controller
{
public function join(JoinRoomRequest $request)
public function join(JoinRoomRequest $request): RedirectResponse
{
$validated = $request->validated();
$user = $request->user();
$room = Room::where('join_code', '=', $validated['join_code'])->firstOrFail();
[$room, $player] = DB::transaction(function () use ($request, $validated, $user): array {
$room = Room::query()
->where('join_code', $validated['join_code'])
->lockForUpdate()
->firstOrFail();
$player = $room->players()->create([
'user_id' => $user?->id,
'name' => $validated['player_name'],
'is_moderator' => false,
'last_seen_at' => now(),
]);
if ($room->isClosed()) {
throw ValidationException::withMessages([
'join_code' => 'Dieser Raum ist geschlossen.',
]);
}
$player = $this->existingPlayer($request, $room);
if ($player === null) {
$player = $room->players()->create([
'user_id' => $user?->id,
'name' => $validated['player_name'],
'is_moderator' => false,
'last_seen_at' => now(),
]);
} else {
$player->update(['last_seen_at' => now()]);
}
$room->update([
'last_activity_at' => now(),
'state_version' => $room->state_version + 1,
]);
return [$room, $player];
});
$request->session()->put(
"room_players.{$room->id}",
@@ -27,6 +55,20 @@ class RoomPlayerController extends Controller
);
return to_route('room.show', $room);
}
private function existingPlayer(JoinRoomRequest $request, Room $room): ?Player
{
if ($request->user() !== null) {
return $room->players()
->where('user_id', $request->user()->id)
->first();
}
$playerId = $request->session()->get("room_players.{$room->id}");
return is_numeric($playerId)
? $room->players()->find((int) $playerId)
: null;
}
}