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