48 lines
1.5 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.markets import MarketsResponse, ErrorResponse
from app.services.coincap_client import CoinCapClient
router = APIRouter(prefix="/markets", tags=["Markets"])
logger = logging.getLogger(__name__)
# Initialize client
client = CoinCapClient()
@router.get(
"",
response_model=MarketsResponse,
summary="Get list of markets",
description="Retrieve a list of markets with optional filters"
)
async def get_markets(
exchange_id: Optional[str] = None,
base_symbol: Optional[str] = None,
base_id: Optional[str] = None,
quote_symbol: Optional[str] = None,
quote_id: Optional[str] = None,
asset_symbol: Optional[str] = None,
asset_id: Optional[str] = None,
limit: Optional[int] = Query(10, ge=1, le=2000),
offset: Optional[int] = Query(0, ge=0),
db: Session = Depends(get_db)
):
try:
response = await client.get_markets(
exchange_id=exchange_id,
base_symbol=base_symbol,
base_id=base_id,
quote_symbol=quote_symbol,
quote_id=quote_id,
asset_symbol=asset_symbol,
asset_id=asset_id,
limit=limit,
offset=offset
)
return response
except Exception as e:
logger.error(f"Error fetching markets: {e}")
raise HTTPException(status_code=500, detail=str(e))