from fastapi import APIRouter, Query, Depends from typing import List from loguru import logger from models import MomentumData, ApiResponse, DataSourceType from adapters import DataAdapterFactory router = APIRouter(prefix="/momentum", tags=["版块动量"]) def get_data_source(source: str = Query(None)) -> DataSourceType: if source: try: return DataSourceType(source) except ValueError: pass return DataSourceType.EASTMONEY @router.get("/sectors", response_model=ApiResponse, summary="获取版块动量数据") async def get_momentum_data( source: DataSourceType = Depends(get_data_source) ): try: adapter = DataAdapterFactory.get_adapter(source) data = await adapter.fetch_momentum_data() return ApiResponse( success=True, data=[item.model_dump() for item in data], message=f"数据来源: {adapter.name}", ) except Exception as e: logger.error(f"Failed to fetch momentum data: {e}") return ApiResponse(success=False, error=str(e))