Files
sanguo_vnpy_v2/_retired/sanguo_web/api/routes/gateway.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

126 lines
3.2 KiB
Python

"""
网关管理路由
处理网关连接、断开、状态查询
"""
from fastapi import APIRouter, Depends, HTTPException, status
from typing import List
import logging
from ..models import GatewayConnectRequest, GatewayDisconnectRequest, GatewayStatus, ApiResponse
from ..deps import get_current_user, get_vn_service
logger = logging.getLogger(__name__)
router = APIRouter()
@router.get("/list", response_model=List[GatewayStatus])
async def list_gateways(
current_user: dict = Depends(get_current_user),
vn_service=Depends(get_vn_service)
):
"""
获取所有可用网关列表
返回系统支持的所有网关,包括已连接和未连接的网关
"""
gateways = await vn_service.get_available_gateways()
return [
GatewayStatus(
gateway_name=g["gateway_name"],
gateway_type=g.get("gateway_type", "unknown"),
status=g.get("status", "disconnected")
)
for g in gateways
]
@router.get("/{name}/setting")
async def get_gateway_setting(
name: str,
current_user: dict = Depends(get_current_user),
vn_service=Depends(get_vn_service)
):
"""
获取网关配置模板
返回指定网关的配置模板,用于前端生成配置表单
"""
setting = await vn_service.get_gateway_setting(name)
return {
"gateway_name": name,
"setting": setting
}
@router.get("/{name}/status")
async def get_gateway_status(
name: str,
current_user: dict = Depends(get_current_user),
vn_service=Depends(get_vn_service)
):
"""
获取网关连接状态
返回指定网关的连接状态
"""
status_info = await vn_service.get_gateway_status(name)
return status_info
@router.post("/{name}/connect")
async def connect_gateway(
name: str,
request: GatewayConnectRequest,
current_user: dict = Depends(get_current_user),
vn_service=Depends(get_vn_service)
):
"""
连接网关
- **gateway_name**: 网关名称
- **gateway_type**: 网关类型 (ctp, ib, okx, binance)
- **setting**: 网关配置参数
"""
success = await vn_service.connect_gateway(
gateway_name=request.gateway_name,
gateway_type=request.gateway_type.value,
setting=request.setting
)
if success:
return ApiResponse(
success=True,
message=f"Gateway {request.gateway_name} is connecting"
)
else:
raise HTTPException(
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
detail=f"Failed to connect gateway {request.gateway_name}"
)
@router.post("/{name}/disconnect")
async def disconnect_gateway(
name: str,
current_user: dict = Depends(get_current_user),
vn_service=Depends(get_vn_service)
):
"""
断开网关
- **name**: 网关名称
"""
success = await vn_service.disconnect_gateway(name)
if success:
return ApiResponse(
success=True,
message=f"Gateway {name} disconnected successfully"
)
else:
raise HTTPException(
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
detail=f"Failed to disconnect gateway {name}"
)