feat(models): 添加 Score 类型定义

- 在 score.py 中定义了 Score 类,用于表示游戏分数信息
This commit is contained in:
jimmy-sketch
2025-07-25 14:18:02 +08:00
parent 86e815b4e2
commit 94d53b2a20

View File

@@ -1,6 +1,8 @@
from enum import Enum, IntEnum from enum import Enum, IntEnum
from typing import Any from typing import Any, Optional
from pydantic import BaseModel from pydantic import BaseModel
from datetime import datetime
from .user import User
class GameMode(str, Enum): class GameMode(str, Enum):
OSU = "osu" OSU = "osu"
@@ -38,3 +40,61 @@ class HitResult(IntEnum):
COMBO_BREAK = 16 # [Order(16)] COMBO_BREAK = 16 # [Order(16)]
LEGACY_COMBO_INCREASE = 99 # [Order(99)] @deprecated LEGACY_COMBO_INCREASE = 99 # [Order(99)] @deprecated
class Score(BaseModel):
# 基本信息
id: int
user_id: int
mode: GameMode
mode_int: int
beatmap_id: int
best_id: int
build_id: int
# 分数和准确度
score: int
accuracy: float
mods: list[APIMod]
total_score: int
# 命中统计
statistics: dict[HitResult, int]
maximum_statistics: dict[HitResult, int]
# 排名相关
rank: str # 等级 (SS, S, A, B, C, D, F)
ranked: bool
rank_country: Optional[int] = None
rank_global: Optional[int] = None
# PP值
pp: Optional[float] = None
pp_exp: Optional[float] = None
# 连击
maximum_combo: int
combo: int
# 游戏设置
is_perfect_combo: bool
passed: bool # 是否通过谱面
# 时间信息
started_at: datetime
ended_at: datetime
# 最佳成绩相关
best_id: Optional[int] = None
is_best: bool = False
# 额外信息
has_replay: bool # 是否有回放
preserve: bool # 是否保留
processed: bool # 是否已处理
# Legacy字段
legacy_score_id: Optional[int] = None
legacy_total_score: int
legacy_perfect: bool
# mp字段