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.

80 lines
2.8 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

"""
期货数据路由
"""
from fastapi import APIRouter, Depends, Query
from sqlalchemy.orm import Session
from app.db.session import get_db
from app.schemas.base import ResponseModel
from app.schemas.kline import BatchKlineRequest
from app.services.future_service import FutureService
from app.core.security import get_current_user
from app.models.user import User
from app.utils.date_utils import parse_date
router = APIRouter()
@router.get("/kline", response_model=ResponseModel)
async def get_future_kline(
codes: str = Query(..., description="期货代码,多个用逗号分隔"),
start_date: str = Query(..., description="开始日期(YYYYMMDD)"),
end_date: str = Query(..., description="结束日期(YYYYMMDD)"),
period: str = Query("daily", description="周期: daily, min1, min5, min15, min30, min60"),
db: Session = Depends(get_db),
current_user: User = Depends(get_current_user)
):
"""获取期货K线数据"""
service = FutureService(db)
code_list = [c.strip() for c in codes.split(",")]
start = parse_date(start_date)
end = parse_date(end_date)
data = service.get_kline(code_list, start, end, period)
return ResponseModel(data=data)
@router.post("/kline/batch", response_model=ResponseModel)
async def batch_get_future_kline(
request: BatchKlineRequest,
db: Session = Depends(get_db),
current_user: User = Depends(get_current_user)
):
"""批量获取期货K线数据"""
service = FutureService(db)
start = parse_date(request.start_date)
end = parse_date(request.end_date)
data = service.get_kline(request.codes, start, end, request.period)
return ResponseModel(data=data)
@router.get("/kline/{code}/chart", response_model=ResponseModel)
async def get_future_kline_chart(
code: str,
start_date: str = Query(..., description="开始日期(YYYYMMDD)"),
end_date: str = Query(..., description="结束日期(YYYYMMDD)"),
period: str = Query("daily", description="周期: daily, min1, min5, min15, min30, min60"),
db: Session = Depends(get_db),
current_user: User = Depends(get_current_user)
):
"""获取期货K线图数据ECharts格式"""
service = FutureService(db)
start = parse_date(start_date)
end = parse_date(end_date)
data = service.get_kline_chart_data(code, start, end, period)
return ResponseModel(data=data)
@router.get("/snapshot", response_model=ResponseModel)
async def get_future_snapshot(
codes: str = Query(..., description="期货代码,多个用逗号分隔"),
start_date: str = Query(..., description="开始日期(YYYYMMDD)"),
end_date: str = Query(..., description="结束日期(YYYYMMDD)"),
db: Session = Depends(get_db),
current_user: User = Depends(get_current_user)
):
"""获取期货历史快照数据"""
return ResponseModel(data={"message": "功能开发中"})