from nba_api.stats.static import players from app.utils.cache import cache_get, cache_set from app.config import PLAYER_SEARCH_TTL def normalize_name(name): return name.strip().lower() def search_players(name): cache_key = f"nba:player:{normalize_name(name)}" cached = cache_get(cache_key) if cached is not None: return cached all_players = players.get_players() search_lower = normalize_name(name) matches = [] for p in all_players: full_name = p["full_name"].lower() if search_lower in full_name: matches.append({ "player_id": p["id"], "full_name": p["full_name"], "is_active": p["is_active"], }) cache_set(cache_key, matches, PLAYER_SEARCH_TTL) return matches def resolve_player(name): """Resolve a player name to a single active player. Returns (player_id, full_name) or raises.""" matches = search_players(name) active = [m for m in matches if m["is_active"]] if not active: if matches: # Return first inactive match as fallback return matches[0]["player_id"], matches[0]["full_name"] return None, None # Prefer exact match search_lower = normalize_name(name) for m in active: if m["full_name"].lower() == search_lower: return m["player_id"], m["full_name"] return active[0]["player_id"], active[0]["full_name"]