fix(multiplayer): fix logic errors in a room's end time

This commit is contained in:
chenjintang-shrimp
2025-08-08 17:38:02 +00:00
parent 00076c247f
commit f4a46054d2
2 changed files with 11 additions and 7 deletions

View File

@@ -1,6 +1,6 @@
from __future__ import annotations from __future__ import annotations
from datetime import UTC, datetime from datetime import UTC, datetime, timedelta
from typing import Literal from typing import Literal
from app.database.beatmap import Beatmap, BeatmapResp from app.database.beatmap import Beatmap, BeatmapResp
@@ -42,8 +42,8 @@ async def get_all_rooms(
resp_list: list[RoomResp] = [] resp_list: list[RoomResp] = []
db_rooms = (await db.exec(select(Room).where(True))).unique().all() db_rooms = (await db.exec(select(Room).where(True))).unique().all()
for room in db_rooms: for room in db_rooms:
if room.ended_at is not None and room.ended_at > datetime.now(UTC): # if room.ends_at is not None and room.ends_at > datetime.now(UTC):
resp_list.append(await RoomResp.from_db(room)) resp_list.append(await RoomResp.from_db(room))
return resp_list return resp_list
@@ -78,9 +78,9 @@ async def create_room(
db_room = room.to_room() db_room = room.to_room()
db_room.host_id = current_user.id if current_user.id else 1 db_room.host_id = current_user.id if current_user.id else 1
db_room.starts_at = datetime.now(UTC) db_room.starts_at = datetime.now(UTC)
# db_room.ended_at = db_room.starts_at + timedelta( db_room.ends_at = db_room.starts_at + timedelta(
# minutes=db_room.duration if db_room.duration is not None else 0 minutes=db_room.duration if db_room.duration is not None else 0
# ) )
db.add(db_room) db.add(db_room)
await db.commit() await db.commit()
await db.refresh(db_room) await db.refresh(db_room)
@@ -134,6 +134,7 @@ async def add_user_to_room(room: int, user: int, db: AsyncSession = Depends(get_
if db_room is not None: if db_room is not None:
db_room.participant_count += 1 db_room.participant_count += 1
await db.commit() await db.commit()
await db.refresh(db_room)
resp = await RoomResp.from_db(db_room) resp = await RoomResp.from_db(db_room)
await db.refresh(db_room) await db.refresh(db_room)
for item in db_room.playlist: for item in db_room.playlist:

View File

@@ -285,7 +285,10 @@ async def create_playlist_score(
room = await session.get(Room, room_id) room = await session.get(Room, room_id)
if not room: if not room:
raise HTTPException(status_code=404, detail="Room not found") raise HTTPException(status_code=404, detail="Room not found")
if room.ended_at and room.ended_at < datetime.now(UTC): db_room_time = (
room.ends_at.replace(tzinfo=UTC) if room.ends_at is not None else room.starts_at
)
if db_room_time and db_room_time < datetime.now(UTC):
raise HTTPException(status_code=400, detail="Room has ended") raise HTTPException(status_code=400, detail="Room has ended")
item = ( item = (
await session.exec( await session.exec(