mirror of
https://github.com/A-Minos/nonebot-plugin-tetris-stats.git
synced 2026-03-05 05:36:54 +08:00
54 lines
2.3 KiB
Python
54 lines
2.3 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.typing import ValidRank
|
|
from .typing import Template
|
|
|
|
|
|
class TETRIOUserConfig(MappedAsDataclass, Model):
|
|
id: Mapped[int] = mapped_column(primary_key=True)
|
|
query_template: Mapped[Template] = mapped_column(String(2))
|
|
|
|
|
|
class TETRIOLeagueStats(MappedAsDataclass, Model):
|
|
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):
|
|
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('nonebot_plugin_tetris_stats_tetrioleaguestats.id'), init=False)
|
|
stats: Mapped['TETRIOLeagueStats'] = relationship(back_populates='raw')
|
|
|
|
|
|
entry_type = PydanticType([], {Entry})
|
|
|
|
|
|
class TETRIOLeagueStatsField(MappedAsDataclass, Model):
|
|
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('nonebot_plugin_tetris_stats_tetrioleaguestats.id'), init=False)
|
|
stats: Mapped['TETRIOLeagueStats'] = relationship(back_populates='fields')
|