aboutsummaryrefslogtreecommitdiff
path: root/src/match_up/model.py
diff options
context:
space:
mode:
authorKaran Jayachandra <mail@karanjayachandra.com>2024-12-02 20:47:11 +0100
committerKaran Jayachandra <mail@karanjayachandra.com>2024-12-02 20:47:11 +0100
commit662e0854a6c61503954aa659e1c932db69443a06 (patch)
tree8d9cf47a6bbac47fe9eeffbc0d92a1eef4323572 /src/match_up/model.py
parented182035cdd39659563b25ffef5387578db25799 (diff)
Fixed bug with team based games
Diffstat (limited to 'src/match_up/model.py')
-rw-r--r--src/match_up/model.py71
1 files changed, 69 insertions, 2 deletions
diff --git a/src/match_up/model.py b/src/match_up/model.py
index 52d72b2..467310b 100644
--- a/src/match_up/model.py
+++ b/src/match_up/model.py
@@ -1,12 +1,23 @@
from math import floor
from typing import Tuple
from os.path import isfile
+from pandas import read_csv
from dataclasses import dataclass
from importlib.resources import path
+from random import getrandbits, randint
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine, not_
-from match_up.data import PLAYER_PER_COURT, BASE, Player, DisplayPlayer
-from match_up.utilities import _init_database_from_csv, _init_random_database
+from names import get_first_name, get_last_name
+from match_up.data import (
+ MIN_LEVEL,
+ MAX_LEVEL,
+ PLAYER_PER_COURT,
+ BASE,
+ GUEST_LEVELS,
+ GUESTS_PER_LEVEL,
+ Player,
+ DisplayPlayer,
+)
@dataclass
@@ -33,6 +44,62 @@ class CourtList:
return active_courts, inactive_courts
+def _init_guests(session) -> None:
+ for level_id, level in enumerate(GUEST_LEVELS):
+ for player_id in range(GUESTS_PER_LEVEL):
+ unique_id = (level_id * GUESTS_PER_LEVEL) + player_id + 1
+ player = Player(
+ id=-unique_id,
+ first="Guest",
+ last=str(unique_id),
+ level=level,
+ status=False,
+ count=0,
+ )
+ session.add(player)
+ session.commit()
+
+
+def _init_database_from_csv(session, csv_location: str) -> None:
+ data = read_csv(csv_location)
+ session.query(Player).delete()
+ for _, entry in data.iterrows():
+ player = Player(
+ id=entry["id"],
+ first=entry["first"],
+ last=entry["last"],
+ level=entry["skill"],
+ team=entry["team"],
+ status=False,
+ count=0,
+ )
+ session.add(player)
+ session.commit()
+ _init_guests(session)
+
+
+def _init_random_database(session, player_count: int = 80) -> None:
+ 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
+ player = Player(
+ id=i,
+ first=get_first_name(),
+ last=get_last_name(),
+ level=randint(MIN_LEVEL, MAX_LEVEL),
+ team=team,
+ status=bool(getrandbits(1)),
+ count=0,
+ )
+ session.add(player)
+ session.commit()
+ _init_guests(session)
+
+
class PlayerList:
def __init__(self, csv_location=None) -> None: