You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

34 lines
1.1 KiB

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