Files
sanguo_vnpy_v2/_retired/sanguo_web/api/routes/strategy.py
T
claude_dev bf57aed17a retire(web): sanguo_web legacy 平行后端归档——用户拍板「代码保留归档,服务删」 [nas]
- git mv sanguo_web → _retired/sanguo_web/(git 历史保全+墓碑 README:
  归档原因/拍板记录/现役=sanguo_api)
- 退出启动面三处: promote.sh ALL_MODS 白名单(15→14 模块)+docker/Dockerfile:63
  COPY+docker/Dockerfile.nas:16 COPY——不可再被部署或启动为服务
- 背景(架构审计 P0-3): 硬编码 SECRET_KEY/admin123 默认口令/CORS 全开/可下
  真实订单/零测试/与 sanguo_api 路由冲突; 生产从未部署为服务, 纯误启动风险
  (README 旧「生产模式 uvicorn sanguo_web」指引已于 f6ca85e 勘误)
- three-env §3.1 模块清单+§12 矩阵行同步; session-guide §5 角色表前端行
  勘误(旧表把 sanguo_web 当前端模块推——实为 legacy 后端, 前端=frontend/)
- 零外部 import(runuweb/tests/packages 全 grep 实证), pytest testpaths=tests
  不受影响

Co-Authored-By: Claude Code <notify@anthropic.com>
2026-10-01 09:46:21 +08:00

146 lines
3.7 KiB
Python

"""
策略管理路由
处理策略的创建、初始化、启动、停止
"""
from fastapi import APIRouter, Depends, HTTPException, status
from typing import List
import logging
from ..models import (
StrategyInfo, StrategyCreateRequest, StrategyInitRequest,
StrategyStartRequest, StrategyStopRequest, StrategyEditRequest
)
from ..deps import get_current_user, get_vn_service
logger = logging.getLogger(__name__)
router = APIRouter()
@router.get("/list", response_model=List[StrategyInfo])
async def list_strategies(
current_user: dict = Depends(get_current_user),
vn_service=Depends(get_vn_service)
):
"""
获取所有策略信息
"""
strategies = await vn_service.get_strategies()
return [
StrategyInfo(
strategy_name=s["strategy_name"],
class_name=s["class_name"],
status=s["status"],
created_at=s["created_at"],
variables=s.get("variables")
)
for s in strategies
]
@router.post("/create")
async def create_strategy(
request: StrategyCreateRequest,
current_user: dict = Depends(get_current_user),
vn_service=Depends(get_vn_service)
):
"""
创建策略
- **strategy_name**: 策略名称
- **class_name**: 策略类名
- **setting**: 策略参数
"""
# 占位实现
logger.info(f"Creating strategy: {request.strategy_name}")
return {
"success": True,
"message": f"Strategy {request.strategy_name} created successfully"
}
@router.post("/init")
async def init_strategy(
request: StrategyInitRequest,
current_user: dict = Depends(get_current_user),
vn_service=Depends(get_vn_service)
):
"""
初始化策略
- **strategy_name**: 策略名称
"""
success = await vn_service.init_strategy(request.strategy_name)
if success:
return {"success": True, "message": "Strategy initialized successfully"}
else:
raise HTTPException(
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
detail=f"Failed to initialize strategy {request.strategy_name}"
)
@router.post("/start")
async def start_strategy(
request: StrategyStartRequest,
current_user: dict = Depends(get_current_user),
vn_service=Depends(get_vn_service)
):
"""
启动策略
- **strategy_name**: 策略名称
"""
success = await vn_service.start_strategy(request.strategy_name)
if success:
return {"success": True, "message": "Strategy started successfully"}
else:
raise HTTPException(
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
detail=f"Failed to start strategy {request.strategy_name}"
)
@router.post("/stop")
async def stop_strategy(
request: StrategyStopRequest,
current_user: dict = Depends(get_current_user),
vn_service=Depends(get_vn_service)
):
"""
停止策略
- **strategy_name**: 策略名称
"""
success = await vn_service.stop_strategy(request.strategy_name)
if success:
return {"success": True, "message": "Strategy stopped successfully"}
else:
raise HTTPException(
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
detail=f"Failed to stop strategy {request.strategy_name}"
)
@router.post("/edit")
async def edit_strategy(
request: StrategyEditRequest,
current_user: dict = Depends(get_current_user),
vn_service=Depends(get_vn_service)
):
"""
编辑策略参数
- **strategy_name**: 策略名称
- **setting**: 新的参数
"""
logger.info(f"Editing strategy: {request.strategy_name}")
return {
"success": True,
"message": "Strategy parameters updated successfully"
}