feat(daily-challenge): simple implement

This commit is contained in:
MingxuanGame
2025-08-09 11:18:29 +00:00
parent 076b9d901b
commit 832a6fc95d
14 changed files with 323 additions and 42 deletions

View File

@@ -25,7 +25,7 @@ from .playlist_best_score import PlaylistBestScore
from .playlists import Playlist, PlaylistResp
from .pp_best_score import PPBestScore
from .relationship import Relationship, RelationshipResp, RelationshipType
from .room import Room, RoomResp
from .room import APIUploadedRoom, Room, RoomResp
from .room_participated_user import RoomParticipatedUser
from .score import (
MultiplayerScores,
@@ -48,6 +48,7 @@ from .user_account_history import (
)
__all__ = [
"APIUploadedRoom",
"Beatmap",
"Beatmapset",
"BeatmapsetResp",

View File

@@ -138,6 +138,6 @@ class PlaylistResp(PlaylistBase):
) -> "PlaylistResp":
data = playlist.model_dump()
if "beatmap" in include:
data["beatmap"] = await BeatmapResp.from_db(playlist.beatmap, from_set=True)
data["beatmap"] = await BeatmapResp.from_db(playlist.beatmap)
resp = cls.model_validate(data)
return resp

View File

@@ -160,3 +160,18 @@ class RoomResp(RoomBase):
participant_count=len(room.users),
)
return resp
class APIUploadedRoom(RoomBase):
def to_room(self) -> Room:
"""
将 APIUploadedRoom 转换为 Room 对象playlist 字段需单独处理。
"""
room_dict = self.model_dump()
room_dict.pop("playlist", None)
# host_id 已在字段中
return Room(**room_dict)
id: int | None
host_id: int | None = None
playlist: list[Playlist] = Field(default_factory=list)