""" 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 }