mirror of
https://github.com/A-Minos/nonebot-plugin-tetris-stats.git
synced 2026-03-05 05:36:54 +08:00
* 🗃️ 自定义表名 * ➕ 添加开发依赖 nonebot-plugin-orm[postgresql] * 🗃️ postgresql 跳过所有旧迁移脚本 * 🗃️ 修正方言 * 🗃️ 添加迁移脚本 * 🚨 auto fix by pre-commit hooks * 🚨 添加一个 noqa( --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
62 lines
2.4 KiB
Python
62 lines
2.4 KiB
Python
from datetime import datetime
|
|
from uuid import UUID
|
|
|
|
from nonebot_plugin_orm import Model
|
|
from sqlalchemy import DateTime, ForeignKey, String
|
|
from sqlalchemy.orm import Mapped, MappedAsDataclass, mapped_column, relationship
|
|
|
|
from ...db.models import PydanticType
|
|
from .api.schemas.leaderboards.by import BySuccessModel, Entry
|
|
from .api.typedefs import ValidRank
|
|
from .typedefs import Template
|
|
|
|
|
|
class TETRIOUserConfig(MappedAsDataclass, Model):
|
|
__tablename__ = 'nb_t_io_u_cfg'
|
|
|
|
id: Mapped[int] = mapped_column(primary_key=True)
|
|
query_template: Mapped[Template] = mapped_column(String(2))
|
|
|
|
|
|
class TETRIOLeagueStats(MappedAsDataclass, Model):
|
|
__tablename__ = 'nb_t_io_tl_stats'
|
|
|
|
id: Mapped[int] = mapped_column(init=False, primary_key=True)
|
|
raw: Mapped[list['TETRIOLeagueHistorical']] = relationship(back_populates='stats', lazy='noload')
|
|
fields: Mapped[list['TETRIOLeagueStatsField']] = relationship(back_populates='stats')
|
|
update_time: Mapped[datetime] = mapped_column(DateTime, index=True)
|
|
|
|
|
|
class TETRIOLeagueHistorical(MappedAsDataclass, Model):
|
|
__tablename__ = 'nb_t_io_tl_hist'
|
|
|
|
id: Mapped[int] = mapped_column(init=False, primary_key=True)
|
|
request_id: Mapped[UUID] = mapped_column(index=True)
|
|
data: Mapped[BySuccessModel] = mapped_column(PydanticType([], {BySuccessModel}))
|
|
update_time: Mapped[datetime] = mapped_column(DateTime, index=True)
|
|
stats_id: Mapped[int] = mapped_column(ForeignKey('nb_t_io_tl_stats.id'), init=False)
|
|
stats: Mapped['TETRIOLeagueStats'] = relationship(back_populates='raw')
|
|
|
|
|
|
entry_type = PydanticType([], {Entry})
|
|
|
|
|
|
class TETRIOLeagueStatsField(MappedAsDataclass, Model):
|
|
__tablename__ = 'nb_t_io_tl_stats_field'
|
|
|
|
id: Mapped[int] = mapped_column(init=False, primary_key=True)
|
|
rank: Mapped[ValidRank] = mapped_column(String(2), index=True)
|
|
tr_line: Mapped[float]
|
|
player_count: Mapped[int]
|
|
low_pps: Mapped[Entry] = mapped_column(entry_type)
|
|
low_apm: Mapped[Entry] = mapped_column(entry_type)
|
|
low_vs: Mapped[Entry] = mapped_column(entry_type)
|
|
avg_pps: Mapped[float]
|
|
avg_apm: Mapped[float]
|
|
avg_vs: Mapped[float]
|
|
high_pps: Mapped[Entry] = mapped_column(entry_type)
|
|
high_apm: Mapped[Entry] = mapped_column(entry_type)
|
|
high_vs: Mapped[Entry] = mapped_column(entry_type)
|
|
stats_id: Mapped[int] = mapped_column(ForeignKey('nb_t_io_tl_stats.id'), init=False)
|
|
stats: Mapped['TETRIOLeagueStats'] = relationship(back_populates='fields')
|