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.

82 lines
2.9 KiB

"""
股票数据路由
"""
from typing import List
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 KlineRequest, BatchKlineRequest
from app.services.stock_service import StockService
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_stock_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 = StockService(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_stock_kline(
request: BatchKlineRequest,
db: Session = Depends(get_db),
current_user: User = Depends(get_current_user)
):
"""批量获取股票K线数据"""
service = StockService(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_stock_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 = StockService(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_stock_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": "功能开发中"})