summaryrefslogtreecommitdiff
path: root/app/utilities.py
diff options
context:
space:
mode:
Diffstat (limited to 'app/utilities.py')
-rw-r--r--app/utilities.py68
1 files changed, 59 insertions, 9 deletions
diff --git a/app/utilities.py b/app/utilities.py
index 133f9e1..cd75d2a 100644
--- a/app/utilities.py
+++ b/app/utilities.py
@@ -1,9 +1,12 @@
+from math import floor
from app import app, db
from datetime import date
from sqlalchemy import func
from typing import Tuple, Sequence
from random import shuffle, sample
-from app.model import Player, DisplayPlayer, Court, Game, DisplayGame, DisplayTeam
+from random import randint, getrandbits
+from names import get_first_name, get_last_name
+from app.model import Player, Court, Game, DisplayGame
def _shuffle_two_lists(a: list, b: list) -> Tuple[list, list]:
@@ -87,8 +90,10 @@ def get_placeholder_games(courts: list[Court], name: str) -> list[DisplayGame]:
p = db.session.query(Player).where(Player.first_name == name).first()
if p is None:
raise ValueError(f"Database isn't initialized.")
- dummy_team = DisplayTeam(DisplayPlayer(p), DisplayPlayer(p))
- games = [DisplayGame(court.id, dummy_team, dummy_team) for court in courts]
+ player_data = {"round_id": None} | {f"player_{i+1}": p.id for i in range(4)}
+ games = [
+ DisplayGame(Game(**({"court_id": court.id} | player_data))) for court in courts # type: ignore
+ ]
return games
@@ -99,10 +104,10 @@ def get_team_games(
for court, (_, players) in zip(courts, teams.items()):
players = sample(players, app.config["PLAYERS_PER_COURT"])
players.sort(key=lambda x: x.level, reverse=True)
- dp = [DisplayPlayer(p) for p in players]
- games.append(
- DisplayGame(court.id, DisplayTeam(dp[0], dp[3]), DisplayTeam(dp[1], dp[2]))
+ game = Game(
+ None, court.id, players[0].id, players[3].id, players[1].id, players[2].id
)
+ games.append(DisplayGame(game))
return games
@@ -114,8 +119,53 @@ def get_shuffle_games(
court_players = group_by_four(selected_players, total_levels)
games = []
for court, players in zip(courts, court_players):
- dp = [DisplayPlayer(p) for p in players]
- games.append(
- DisplayGame(court.id, DisplayTeam(dp[0], dp[3]), DisplayTeam(dp[1], dp[2]))
+ game = Game(
+ None, court.id, players[0].id, players[3].id, players[1].id, players[2].id
)
+ games.append(DisplayGame(game))
return games
+
+
+def initialize_default_players():
+ db.session.query(Player).delete()
+ for k, v in app.config["DEFAULTS"].items():
+ db.session.add(Player(**{"id": v, "first_name": k, "last_name": ""}))
+ guest_offset = 10000
+ for i, (k, v) in enumerate(app.config["GUESTS"].items()):
+ level_offset = app.config["GUEST_COUNT"] * i
+ for j in range(app.config["GUEST_COUNT"]):
+ db.session.add(
+ Player(
+ **{
+ "id": guest_offset + level_offset + j,
+ "first_name": k,
+ "last_name": f"{j + 1}",
+ "level": v,
+ }
+ )
+ )
+ db.session.commit()
+
+
+def initialize_random_database():
+ initialize_default_players()
+ player_count = 80
+ total_teams = 5
+ players_per_team = 5
+ for i in range(player_count):
+ if i < total_teams * players_per_team:
+ team = floor(i / players_per_team) + 1
+ else:
+ team = 0
+ args = {
+ "id": 3 + i,
+ "first_name": get_first_name(),
+ "last_name": get_last_name(),
+ "team": team,
+ "status": bool(getrandbits(1)),
+ "level": randint(
+ app.config["MIN_PLAYER_LEVEL"], app.config["MAX_PLAYER_LEVEL"]
+ ),
+ }
+ db.session.add(Player(**args))
+ db.session.commit()