From 729203409fb73fdbac19b8af9d647883a5ac96b0 Mon Sep 17 00:00:00 2001 From: Karan Jayachandra Date: Mon, 14 Jul 2025 12:25:55 +0200 Subject: Back to working --- app/utilities.py | 68 ++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 59 insertions(+), 9 deletions(-) (limited to 'app/utilities.py') 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() -- cgit v1.3.1