feat(multiplayer): 增加房间用户添加功能并优化房间模型

- 新增 APIUser 模型用于表示房间内的用户
- 扩展 MultiplayerRoom 模型以支持更多房间相关功能
- 添加用户加入房间的路由和相关逻辑
- 优化 Room 模型,增加从 MultiplayerRoom 转换的方法
This commit is contained in:
jimmy-sketch
2025-07-27 15:04:30 +00:00
parent d08df157e7
commit d16a2ac1b5
3 changed files with 174 additions and 6 deletions

View File

@@ -2,7 +2,11 @@ from __future__ import annotations
from app.database.room import RoomIndex
from app.dependencies.database import get_db, get_redis
from app.models.room import Room
from app.models.room import (
MultiplayerRoom,
MultiplayerRoomUser,
Room,
)
from .api_router import router
@@ -27,9 +31,37 @@ async def get_all_rooms(
for room_index in all_room_ids:
dumped_room = redis.get(str(room_index.id))
if dumped_room:
actual_room = Room.model_validate_json(str(dumped_room))
actual_room = MultiplayerRoom.model_validate_json(str(dumped_room))
actual_room = Room.from_MultiplayerRoom(actual_room)
if actual_room.status == status and actual_room.category == category:
roomsList.append(actual_room)
return roomsList
else:
raise HTTPException(status_code=500, detail="Redis Error")
@router.put("/rooms/{room}/users/{user}", tags=["rooms"], response_model=Room)
async def add_user_to_room(
room: int, user: int, password: str, db: AsyncSession = Depends(dependency=get_db)
):
redis = get_redis()
if redis:
dumped_room = redis.get(str(room))
if not dumped_room:
raise HTTPException(status_code=404, detail="房间不存在")
actual_room = MultiplayerRoom.model_validate_json(str(dumped_room))
# 验证密码
if password != actual_room.settings.password:
raise HTTPException(status_code=403, detail="Invalid password")
# 继续处理加入房间的逻辑
actual_room.users.append(
MultiplayerRoomUser(
id=user, matchState=None, rulesetId=None, beatmapId=None
)
)
actual_room = Room.from_MultiplayerRoom(actual_room)
return actual_room
else:
raise HTTPException(status_code=500, detail="Redis Error")