import logging import sqlite3 import requests from app.config import DB_PATH logger = logging.getLogger(__name__) def create_standings_table(conn): cursor = conn.cursor() cursor.execute(""" CREATE TABLE IF NOT EXISTS standings ( team_common_name TEXT, league_sequence INTEGER, league_l10_sequence INTEGER, division_abbrev TEXT, conference_abbrev TEXT, games_played INTEGER, wildcard_sequence INTEGER ) """) conn.commit() def migrate_standings_table(conn): cursor = conn.cursor() for col_name, col_type in [ ("division_abbrev", "TEXT"), ("conference_abbrev", "TEXT"), ("games_played", "INTEGER"), ("wildcard_sequence", "INTEGER"), ]: try: cursor.execute(f"ALTER TABLE standings ADD COLUMN {col_name} {col_type}") conn.commit() except sqlite3.OperationalError: pass # Column already exists def truncate_standings_table(conn): cursor = conn.cursor() cursor.execute("DELETE FROM standings") conn.commit() def insert_standings(conn, standings): cursor = conn.cursor() for team in standings: cursor.execute( """ INSERT INTO standings ( team_common_name, league_sequence, league_l10_sequence, division_abbrev, conference_abbrev, games_played, wildcard_sequence ) VALUES (?, ?, ?, ?, ?, ?, ?) """, ( team["team_common_name"], team["league_sequence"], team["league_l10_sequence"], team["division_abbrev"], team["conference_abbrev"], team["games_played"], team["wildcard_sequence"], ), ) conn.commit() def fetch_standings(): url = "https://api-web.nhle.com/v1/standings/now" try: response = requests.get(url, timeout=10) response.raise_for_status() standings_data = response.json() standings = [] for team in standings_data.get("standings", []): standings.append( { "team_common_name": team["teamCommonName"]["default"], "league_sequence": team["leagueSequence"], "league_l10_sequence": team["leagueL10Sequence"], "division_abbrev": team["divisionAbbrev"], "conference_abbrev": team["conferenceAbbrev"], "games_played": team["gamesPlayed"], "wildcard_sequence": team["wildcardSequence"], } ) return standings except requests.RequestException as e: logger.error("Failed to fetch standings: %s", e) return None def refresh_standings(): conn = sqlite3.connect(DB_PATH) create_standings_table(conn) migrate_standings_table(conn) standings = fetch_standings() if standings: truncate_standings_table(conn) insert_standings(conn, standings) conn.close()