52 lines
1.6 KiB
Python

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))