feat(database): 新增 Score 数据库模型并更新 User 关系
- 创建 Score 类作为成绩数据库模型,对应 osu! API 中的 Score 对象 - 在 User 模型中添加与 Score 的关系- 优化了数据库表结构,增加了索引和字段约束
This commit is contained in:
41
app/database/score.py
Normal file
41
app/database/score.py
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from datetime import datetime
|
||||||
|
from . import User
|
||||||
|
from sqlalchemy import Column, DateTime
|
||||||
|
from sqlmodel import Field, Relationship, SQLModel
|
||||||
|
|
||||||
|
class Score(SQLModel, table=True):
|
||||||
|
"""
|
||||||
|
成绩数据库模型,对应osu! API中的Score对象
|
||||||
|
参考: https://osu.ppy.sh/docs/index.html#score
|
||||||
|
数据库表结构参考: migrations/base.sql
|
||||||
|
"""
|
||||||
|
__tablename__ = "scores"
|
||||||
|
|
||||||
|
# 基本字段
|
||||||
|
id: int = Field(primary_key=True)
|
||||||
|
map_md5: str = Field(max_length=32, index=True)
|
||||||
|
score: int
|
||||||
|
pp: float
|
||||||
|
acc: float
|
||||||
|
max_combo: int
|
||||||
|
mods: int = Field(index=True)
|
||||||
|
n300: int
|
||||||
|
n100: int
|
||||||
|
n50: int
|
||||||
|
nmiss: int
|
||||||
|
ngeki: int
|
||||||
|
nkatu: int
|
||||||
|
grade: str = Field(default="N", max_length=2)
|
||||||
|
status: int = Field(index=True)
|
||||||
|
mode: int = Field(index=True)
|
||||||
|
play_time: datetime = Field(sa_column=Column(DateTime, index=True))
|
||||||
|
time_elapsed: int
|
||||||
|
client_flags: int
|
||||||
|
userid: int = Field(index=True)
|
||||||
|
perfect: bool
|
||||||
|
online_checksum: str = Field(max_length=32, index=True)
|
||||||
|
|
||||||
|
# 关联关系
|
||||||
|
user: "User" = Relationship(back_populates="scores")
|
||||||
@@ -1,4 +1,6 @@
|
|||||||
# ruff: noqa: I002
|
# ruff: noqa: I002
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
@@ -95,7 +97,6 @@ class User(SQLModel, table=True):
|
|||||||
back_populates="user"
|
back_populates="user"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
# ============================================
|
# ============================================
|
||||||
# Lazer API 专用表模型
|
# Lazer API 专用表模型
|
||||||
# ============================================
|
# ============================================
|
||||||
|
|||||||
Reference in New Issue
Block a user