123df671f5
Reviewed-on: #5 Co-authored-by: David Gwilliam <dhgwilliam@gmail.com> Co-committed-by: David Gwilliam <dhgwilliam@gmail.com>
139 lines
3.8 KiB
Python
139 lines
3.8 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Generate 100+ games to test ELO rating calculations
|
|
"""
|
|
|
|
import sqlite3
|
|
import random
|
|
from datetime import datetime, timedelta
|
|
|
|
DB_PATH = "prisma/prisma/dev.db"
|
|
|
|
|
|
def get_players():
|
|
"""Get all players from the database"""
|
|
conn = sqlite3.connect(DB_PATH)
|
|
cursor = conn.cursor()
|
|
cursor.execute("SELECT id, name, currentElo FROM players")
|
|
players = cursor.fetchall()
|
|
conn.close()
|
|
return players
|
|
|
|
|
|
def generate_game(players, game_num, base_date):
|
|
"""Generate a single game with random players and scores"""
|
|
# Randomly select 4 different players
|
|
selected_players = random.sample(players, 4)
|
|
p1, p2, p3, p4 = selected_players
|
|
|
|
# Randomly assign teams (Team 1 vs Team 2)
|
|
team1_p1 = p1
|
|
team1_p2 = p2
|
|
team2_p1 = p3
|
|
team2_p2 = p4
|
|
|
|
# Generate realistic scores (Euchre games typically 10 points max)
|
|
# Team 1 wins 60% of the time for variety
|
|
team1_wins = random.random() < 0.6
|
|
if team1_wins:
|
|
# Team 1 wins - generate scores
|
|
team1_score = random.randint(10, 15)
|
|
team2_score = random.randint(0, 9)
|
|
else:
|
|
# Team 2 wins - generate scores
|
|
team2_score = random.randint(10, 15)
|
|
team1_score = random.randint(0, 9)
|
|
|
|
# Generate random date in the past 30 days
|
|
days_ago = random.randint(0, 30)
|
|
game_date = base_date - timedelta(
|
|
days=days_ago, hours=random.randint(0, 23), minutes=random.randint(0, 59)
|
|
)
|
|
|
|
return {
|
|
"team1P1Id": team1_p1[0],
|
|
"team1P2Id": team1_p2[0],
|
|
"team2P1Id": team2_p1[0],
|
|
"team2P2Id": team2_p2[0],
|
|
"team1Score": team1_score,
|
|
"team2Score": team2_score,
|
|
"playedAt": game_date.isoformat() + "Z",
|
|
"status": "completed",
|
|
"eventId": None,
|
|
}
|
|
|
|
|
|
def insert_games(games):
|
|
"""Insert games into the database"""
|
|
conn = sqlite3.connect(DB_PATH)
|
|
cursor = conn.cursor()
|
|
|
|
for game in games:
|
|
cursor.execute(
|
|
"""
|
|
INSERT INTO matches
|
|
(team1P1Id, team1P2Id, team2P1Id, team2P2Id, team1Score, team2Score, playedAt, status, eventId, createdAt, updatedAt)
|
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
""",
|
|
(
|
|
game["team1P1Id"],
|
|
game["team1P2Id"],
|
|
game["team2P1Id"],
|
|
game["team2P2Id"],
|
|
game["team1Score"],
|
|
game["team2Score"],
|
|
game["playedAt"],
|
|
game["status"],
|
|
game["eventId"],
|
|
datetime.now().isoformat() + "Z",
|
|
datetime.now().isoformat() + "Z",
|
|
),
|
|
)
|
|
|
|
conn.commit()
|
|
conn.close()
|
|
|
|
|
|
def main():
|
|
print("Generating 150 games to test ELO ratings...")
|
|
print("=" * 60)
|
|
|
|
players = get_players()
|
|
print(f"Found {len(players)} players in database")
|
|
|
|
# Generate 150 games
|
|
num_games = 150
|
|
base_date = datetime.now()
|
|
|
|
games = []
|
|
for i in range(num_games):
|
|
game = generate_game(players, i, base_date)
|
|
games.append(game)
|
|
|
|
print(f"Generated {len(games)} games")
|
|
|
|
# Insert games into database
|
|
print("Inserting games into database...")
|
|
insert_games(games)
|
|
print("Games inserted successfully!")
|
|
|
|
# Show sample games
|
|
print("\nSample games:")
|
|
print("-" * 80)
|
|
for i, game in enumerate(games[:3]):
|
|
print(
|
|
f"Game {i + 1}: Team 1 ({game['team1Score']}) vs Team 2 ({game['team2Score']})"
|
|
)
|
|
print(f" Team 1: Player {game['team1P1Id']} + Player {game['team1P2Id']}")
|
|
print(f" Team 2: Player {game['team2P1Id']} + Player {game['team2P2Id']}")
|
|
print(f" Date: {game['playedAt']}")
|
|
print()
|
|
|
|
print("=" * 60)
|
|
print(f"Total games generated: {num_games}")
|
|
print("Now check the ELO ratings by running the application!")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|