feat(api): 轻量 FastAPI 5 路由(无 JWT/WS/前端)

This commit is contained in:
2026-07-06 11:38:15 +08:00
parent 330b687e83
commit 0f894c8415
7 changed files with 368 additions and 0 deletions
+72
View File
@@ -0,0 +1,72 @@
"""
FastAPI routes for Sanguo Quant API
"""
from fastapi import APIRouter, HTTPException
from .schemas import CtaBacktestRequest, OptimizeRequest, FactorAnalysisRequest
router = APIRouter()
_orchestrator = None
def set_orchestrator(orch):
"""Set the global orchestrator instance"""
global _orchestrator
_orchestrator = orch
def get_orchestrator():
"""Get the global orchestrator instance"""
return _orchestrator
@router.post("/backtest/cta")
def submit_cta(req: CtaBacktestRequest):
"""Submit CTA backtest task"""
tid = get_orchestrator().submit_cta(
strategy_class=req.strategy,
symbol=req.symbol,
params=req.params,
start=req.start,
end=req.end,
cfg=None
)
return {"task_id": tid}
@router.post("/backtest/optimize")
def submit_optimize(req: OptimizeRequest):
"""Submit optimization task (placeholder)"""
# TODO: Implement optimize submission in Phase 3
return {"task_id": "pending_impl"}
@router.post("/factor/analyze")
def submit_factor(req: FactorAnalysisRequest):
"""Submit factor analysis task (placeholder)"""
# TODO: Implement factor analysis submission in Phase 3
return {"task_id": "pending_impl"}
@router.get("/task/{task_id}")
def get_status(task_id: str):
"""Get task status"""
status = get_orchestrator().get_status(task_id)
if status is None:
raise HTTPException(status_code=404, detail="task not found")
return {
"task_id": task_id,
"status": status.value if hasattr(status, "value") else str(status)
}
@router.get("/task/{task_id}/result")
def get_result(task_id: str):
"""Get task result"""
result = get_orchestrator().get_result(task_id)
if result is None:
raise HTTPException(status_code=404, detail="result not ready")
return {
"task_id": task_id,
"statistics": result.statistics
}