100 lines
2.5 KiB
Python
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
|