gardarjuto's picture
major refactor
1d31670
from fastapi import APIRouter
from typing import List, Dict, Any
import logging
from app.services.leaderboard import IcelandicLeaderboardService
from app.core.fastapi_cache import cached, build_cache_key
logger = logging.getLogger(__name__)
router = APIRouter()
leaderboard_service = IcelandicLeaderboardService()
def leaderboard_key_builder(func, namespace: str = "icelandic_leaderboard", **kwargs):
"""Build cache key for Icelandic leaderboard data"""
key_type = "raw" if func.__name__ == "get_leaderboard" else "formatted"
key = build_cache_key(namespace, key_type)
logger.debug(f"Built Icelandic leaderboard cache key: {key}")
return key
@router.get("")
@cached(expire=300, key_builder=leaderboard_key_builder)
async def get_leaderboard() -> List[Dict[str, Any]]:
"""
Get raw Icelandic leaderboard data
Response will be automatically GZIP compressed if size > 500 bytes
"""
try:
logger.info("Fetching raw Icelandic leaderboard data")
data = await leaderboard_service.fetch_raw_data()
logger.info(f"Retrieved {len(data)} Icelandic leaderboard entries")
return data
except Exception as e:
logger.error(f"Failed to fetch raw Icelandic leaderboard data: {e}")
raise
@router.get("/formatted")
@cached(expire=300, key_builder=leaderboard_key_builder)
async def get_formatted_leaderboard() -> List[Dict[str, Any]]:
"""
Get formatted Icelandic leaderboard data with restructured objects
Response will be automatically GZIP compressed if size > 500 bytes
"""
try:
logger.info("Fetching formatted Icelandic leaderboard data")
data = await leaderboard_service.get_formatted_data()
logger.info(f"Retrieved {len(data)} formatted Icelandic entries")
return data
except Exception as e:
logger.error(f"Failed to fetch formatted Icelandic leaderboard data: {e}")
raise