48 lines
1.5 KiB
Python
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)) |