mirror of
https://github.com/evroon/bracket.git
synced 2026-03-10 03:02:17 -04:00
207 lines
7.8 KiB
Python
207 lines
7.8 KiB
Python
from sqlalchemy import Column, ForeignKey, Integer, String, Table
|
|
from sqlalchemy.orm import declarative_base # type: ignore[attr-defined]
|
|
from sqlalchemy.sql.sqltypes import BigInteger, Boolean, DateTime, Enum, Float, Text
|
|
|
|
Base = declarative_base()
|
|
metadata = Base.metadata
|
|
DateTimeTZ = DateTime(timezone=True)
|
|
|
|
clubs = Table(
|
|
"clubs",
|
|
metadata,
|
|
Column("id", BigInteger, primary_key=True, index=True, autoincrement=True),
|
|
Column("name", String, nullable=False, index=True),
|
|
Column("created", DateTimeTZ, nullable=False),
|
|
)
|
|
|
|
tournaments = Table(
|
|
"tournaments",
|
|
metadata,
|
|
Column("id", BigInteger, primary_key=True, index=True),
|
|
Column("name", String, nullable=False, index=True),
|
|
Column("created", DateTimeTZ, nullable=False, server_default="now()"),
|
|
Column("start_time", DateTimeTZ, nullable=False),
|
|
Column("club_id", BigInteger, ForeignKey("clubs.id"), index=True, nullable=False),
|
|
Column("dashboard_public", Boolean, nullable=False),
|
|
Column("logo_path", String, nullable=True),
|
|
Column("dashboard_endpoint", String, nullable=True, index=True, unique=True),
|
|
Column("players_can_be_in_multiple_teams", Boolean, nullable=False, server_default="f"),
|
|
Column("auto_assign_courts", Boolean, nullable=False, server_default="f"),
|
|
Column("duration_minutes", Integer, nullable=False, server_default="15"),
|
|
Column("margin_minutes", Integer, nullable=False, server_default="5"),
|
|
)
|
|
|
|
stages = Table(
|
|
"stages",
|
|
metadata,
|
|
Column("id", BigInteger, primary_key=True, index=True),
|
|
Column("name", String, nullable=False, index=True),
|
|
Column("created", DateTimeTZ, nullable=False),
|
|
Column("tournament_id", BigInteger, ForeignKey("tournaments.id"), index=True, nullable=False),
|
|
Column("is_active", Boolean, nullable=False, server_default="false"),
|
|
)
|
|
|
|
stage_items = Table(
|
|
"stage_items",
|
|
metadata,
|
|
Column("id", BigInteger, primary_key=True, index=True),
|
|
Column("name", Text, nullable=False),
|
|
Column("created", DateTimeTZ, nullable=False, server_default="now()"),
|
|
Column("stage_id", BigInteger, ForeignKey("stages.id"), index=True, nullable=False),
|
|
Column("team_count", Integer, nullable=False),
|
|
Column(
|
|
"type",
|
|
Enum(
|
|
"SINGLE_ELIMINATION",
|
|
"SWISS",
|
|
"ROUND_ROBIN",
|
|
name="stage_type",
|
|
),
|
|
nullable=False,
|
|
),
|
|
)
|
|
|
|
stage_item_inputs = Table(
|
|
"stage_item_inputs",
|
|
metadata,
|
|
Column("id", BigInteger, primary_key=True, index=True),
|
|
Column("slot", Integer, nullable=False),
|
|
Column("tournament_id", BigInteger, ForeignKey("tournaments.id"), index=True, nullable=False),
|
|
Column(
|
|
"stage_item_id",
|
|
BigInteger,
|
|
ForeignKey("stage_items.id", ondelete="CASCADE"),
|
|
index=True,
|
|
nullable=False,
|
|
),
|
|
Column("team_id", BigInteger, ForeignKey("teams.id"), nullable=True),
|
|
Column("winner_from_stage_item_id", BigInteger, ForeignKey("stage_items.id"), nullable=True),
|
|
Column("winner_position", Integer, nullable=True),
|
|
)
|
|
|
|
rounds = Table(
|
|
"rounds",
|
|
metadata,
|
|
Column("id", BigInteger, primary_key=True, index=True),
|
|
Column("name", Text, nullable=False),
|
|
Column("created", DateTimeTZ, nullable=False),
|
|
Column("is_draft", Boolean, nullable=False),
|
|
Column("is_active", Boolean, nullable=False, server_default="false"),
|
|
Column("stage_item_id", BigInteger, ForeignKey("stage_items.id"), nullable=False),
|
|
)
|
|
|
|
|
|
matches = Table(
|
|
"matches",
|
|
metadata,
|
|
Column("id", BigInteger, primary_key=True, index=True),
|
|
Column("created", DateTimeTZ, nullable=False),
|
|
Column("start_time", DateTimeTZ, nullable=True),
|
|
Column("duration_minutes", Integer, nullable=True),
|
|
Column("margin_minutes", Integer, nullable=True),
|
|
Column("custom_duration_minutes", Integer, nullable=True),
|
|
Column("custom_margin_minutes", Integer, nullable=True),
|
|
Column("round_id", BigInteger, ForeignKey("rounds.id"), nullable=False),
|
|
Column("team1_id", BigInteger, ForeignKey("teams.id"), nullable=True),
|
|
Column("team2_id", BigInteger, ForeignKey("teams.id"), nullable=True),
|
|
Column(
|
|
"team1_winner_from_stage_item_id", BigInteger, ForeignKey("stage_items.id"), nullable=True
|
|
),
|
|
Column(
|
|
"team2_winner_from_stage_item_id", BigInteger, ForeignKey("stage_items.id"), nullable=True
|
|
),
|
|
Column("team1_winner_position", Integer, nullable=True),
|
|
Column("team2_winner_position", Integer, nullable=True),
|
|
Column("team1_winner_from_match_id", BigInteger, ForeignKey("matches.id"), nullable=True),
|
|
Column("team2_winner_from_match_id", BigInteger, ForeignKey("matches.id"), nullable=True),
|
|
Column("court_id", BigInteger, ForeignKey("courts.id"), nullable=True),
|
|
Column("team1_score", Integer, nullable=False),
|
|
Column("team2_score", Integer, nullable=False),
|
|
Column("position_in_schedule", Integer, nullable=True),
|
|
)
|
|
|
|
teams = Table(
|
|
"teams",
|
|
metadata,
|
|
Column("id", BigInteger, primary_key=True, index=True),
|
|
Column("name", String, nullable=False, index=True),
|
|
Column("created", DateTimeTZ, nullable=False),
|
|
Column("tournament_id", BigInteger, ForeignKey("tournaments.id"), index=True, nullable=False),
|
|
Column("active", Boolean, nullable=False, index=True, server_default="t"),
|
|
Column("elo_score", Float, nullable=False, server_default="0"),
|
|
Column("swiss_score", Float, nullable=False, server_default="0"),
|
|
Column("wins", Integer, nullable=False, server_default="0"),
|
|
Column("draws", Integer, nullable=False, server_default="0"),
|
|
Column("losses", Integer, nullable=False, server_default="0"),
|
|
Column("logo_path", String, nullable=True),
|
|
)
|
|
|
|
players = Table(
|
|
"players",
|
|
metadata,
|
|
Column("id", BigInteger, primary_key=True, index=True),
|
|
Column("name", String, nullable=False, index=True),
|
|
Column("created", DateTimeTZ, nullable=False),
|
|
Column("tournament_id", BigInteger, ForeignKey("tournaments.id"), index=True, nullable=False),
|
|
Column("elo_score", Float, nullable=False),
|
|
Column("swiss_score", Float, nullable=False),
|
|
Column("wins", Integer, nullable=False),
|
|
Column("draws", Integer, nullable=False),
|
|
Column("losses", Integer, nullable=False),
|
|
Column("active", Boolean, nullable=False, index=True, server_default="t"),
|
|
)
|
|
|
|
users = Table(
|
|
"users",
|
|
metadata,
|
|
Column("id", BigInteger, primary_key=True, index=True),
|
|
Column("email", String, nullable=False, index=True, unique=True),
|
|
Column("name", String, nullable=False),
|
|
Column("password_hash", String, nullable=False),
|
|
Column("created", DateTimeTZ, nullable=False),
|
|
Column(
|
|
"account_type",
|
|
Enum(
|
|
"REGULAR",
|
|
"DEMO",
|
|
name="account_type",
|
|
),
|
|
nullable=False,
|
|
),
|
|
)
|
|
|
|
users_x_clubs = Table(
|
|
"users_x_clubs",
|
|
metadata,
|
|
Column("id", BigInteger, primary_key=True, index=True),
|
|
Column("club_id", BigInteger, ForeignKey("clubs.id", ondelete="CASCADE"), nullable=False),
|
|
Column("user_id", BigInteger, ForeignKey("users.id", ondelete="CASCADE"), nullable=False),
|
|
Column(
|
|
"relation",
|
|
Enum(
|
|
"OWNER",
|
|
"COLLABORATOR",
|
|
name="user_x_club_relation",
|
|
),
|
|
nullable=False,
|
|
default="OWNER",
|
|
),
|
|
)
|
|
|
|
players_x_teams = Table(
|
|
"players_x_teams",
|
|
metadata,
|
|
Column("id", BigInteger, primary_key=True, index=True),
|
|
Column("player_id", BigInteger, ForeignKey("players.id", ondelete="CASCADE"), nullable=False),
|
|
Column("team_id", BigInteger, ForeignKey("teams.id", ondelete="CASCADE"), nullable=False),
|
|
)
|
|
|
|
courts = Table(
|
|
"courts",
|
|
metadata,
|
|
Column("id", BigInteger, primary_key=True, index=True),
|
|
Column("name", Text, nullable=False),
|
|
Column("created", DateTimeTZ, nullable=False),
|
|
Column("tournament_id", BigInteger, ForeignKey("tournaments.id"), nullable=False, index=True),
|
|
)
|