attributes->get('currentPlayer'); abort_unless( $player instanceof Player && $player->room_id === $room->id, 403, ); $value = $request->validated('value'); DB::transaction(function () use ($room, $player, $value) { $lockedRoom = Room::query() ->lockForUpdate() ->findOrFail($room->id); if ($lockedRoom->revealed_at !== null) { throw ValidationException::withMessages([ 'value' => 'Die Karten wurden bereits aufgedeckt.', ]); } Vote::updateOrCreate( [ 'room_id' => $lockedRoom->id, 'player_id' => $player->id, 'round' => $lockedRoom->current_round, ], [ 'value' => $value, ], ); $lockedRoom->increment('state_version'); }); return back(); } }