""" 网关管理路由 处理网关连接、断开、状态查询 """ 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}" )