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
|
||||
from __future__ import annotations
|
||||
|
||||
from dataclasses import dataclass
|
||||
from datetime import datetime
|
||||
from typing import Optional
|
||||
@@ -95,7 +97,6 @@ class User(SQLModel, table=True):
|
||||
back_populates="user"
|
||||
)
|
||||
|
||||
|
||||
# ============================================
|
||||
# Lazer API 专用表模型
|
||||
# ============================================
|
||||
|
||||
Reference in New Issue
Block a user