From 94d53b2a205a3c623459cd156e273b660a8424a9 Mon Sep 17 00:00:00 2001 From: jimmy-sketch Date: Fri, 25 Jul 2025 14:18:02 +0800 Subject: [PATCH] =?UTF-8?q?feat(models):=20=E6=B7=BB=E5=8A=A0=20Score=20?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E5=AE=9A=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 score.py 中定义了 Score 类,用于表示游戏分数信息 --- app/models/score.py | 62 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 61 insertions(+), 1 deletion(-) diff --git a/app/models/score.py b/app/models/score.py index 29f1f18..653c75a 100644 --- a/app/models/score.py +++ b/app/models/score.py @@ -1,6 +1,8 @@ from enum import Enum, IntEnum -from typing import Any +from typing import Any, Optional from pydantic import BaseModel +from datetime import datetime +from .user import User class GameMode(str, Enum): OSU = "osu" @@ -38,3 +40,61 @@ class HitResult(IntEnum): COMBO_BREAK = 16 # [Order(16)] 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字段 \ No newline at end of file