availabili.tf/backend-flask/models/match.py

100 lines
2.5 KiB
Python

from datetime import datetime, timedelta
from typing import TypedDict
from sqlalchemy.orm import Mapped, mapped_column, relationship
from sqlalchemy.sql import func
from sqlalchemy.types import TIMESTAMP, Integer, Interval, String
import app_db
import spec
class Match(app_db.BaseModel):
__tablename__ = "matches"
logs_tf_id: Mapped[int] = mapped_column(Integer, primary_key=True)
logs_tf_title: Mapped[str] = mapped_column(String(255))
duration: Mapped[int] = mapped_column(Integer)
match_time: Mapped[datetime] = mapped_column(TIMESTAMP)
blue_score: Mapped[int] = mapped_column(Integer)
red_score: Mapped[int] = mapped_column(Integer)
created_at: Mapped[datetime] = mapped_column(TIMESTAMP, server_default=func.now())
teams: Mapped["TeamMatch"] = relationship("TeamMatch", back_populates="match")
players: Mapped["PlayerMatch"] = relationship("PlayerMatch", back_populates="match")
class MatchSchema(spec.BaseModel):
logs_tf_id: int
logs_tf_title: str
duration: int
match_time: datetime
blue_score: int
red_score: int
created_at: datetime
@classmethod
def from_model(cls, model: Match):
return cls(
logs_tf_id=model.logs_tf_id,
logs_tf_title=model.logs_tf_title,
duration=model.duration,
match_time=model.match_time,
blue_score=model.blue_score,
red_score=model.red_score,
created_at=model.created_at
)
class RawLogSummary:
id: int
title: str
map: str
date: int
players: int
views: int
@classmethod
def from_response(cls, response: dict):
object = cls()
object.id = response["id"]
object.title = response["title"]
object.map = response["map"]
object.date = response["date"]
object.players = response["players"]
object.views = response["views"]
return object
class LogTeam(TypedDict):
score: int
#kills: int
#deaths: int
#dmg: int
#charges: int
#drops: int
#firstcaps: int
#caps: int
class LogPlayer(TypedDict):
team: str
kills: int
deaths: int
assists: int
dmg: int
dt: int
class LogInfo(TypedDict):
title: str
map: str
date: int
class LogRound(TypedDict):
length: int
class RawLogDetails(TypedDict):
teams: dict[str, LogTeam]
players: dict[str, LogPlayer]
#rounds: list[LogRound]
info: LogInfo
length: int
from models.team_match import TeamMatch
from models.player_match import PlayerMatch