from fastapi import APIRouter, Depends, HTTPException, Query from sqlalchemy.orm import Session from typing import List, Optional import logging from app.database import get_db from app.schemas.rates import ( RatesResponse, SingleRateResponse, ErrorResponse ) from app.services.coincap_client import CoinCapClient router = APIRouter(prefix="/rates", tags=["Rates"]) logger = logging.getLogger(__name__) # Initialize client client = CoinCapClient() @router.get( "", response_model=RatesResponse, summary="Get conversion rates", description="Retrieve a list of conversion rates with optional filtering" ) async def get_rates( ids: Optional[str] = None, db: Session = Depends(get_db) ): try: response = await client.get_rates(ids=ids) return response except Exception as e: logger.error(f"Error fetching rates: {e}") raise HTTPException(status_code=500, detail=str(e)) @router.get( "/{slug}", response_model=SingleRateResponse, responses={404: {"model": ErrorResponse}}, summary="Get a specific conversion rate", description="Retrieve details for a specific conversion rate by its slug" ) async def get_rate(slug: str, db: Session = Depends(get_db)): try: response = await client.get_rate(slug) if not response.get("data"): raise HTTPException(status_code=404, detail=f"Rate {slug} not found") return response except HTTPException: raise except Exception as e: logger.error(f"Error fetching rate {slug}: {e}") raise HTTPException(status_code=500, detail=str(e))