"""Feishu connection test routes.""" from __future__ import annotations from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.ext.asyncio import AsyncSession from ...core.database import get_db from ...dependencies.auth import get_current_user from ...dependencies.tenant import get_tenant_id from ...models import User from ...services.feishu_integration_service import get_feishu_service from ...services.feishu_long_connection_core import get_feishu_long_connection_manager from .helpers import build_long_connection_failure router = APIRouter() @router.post("/test-connection") async def test_feishu_connection( current_user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db), tenant_id: int = Depends(get_tenant_id), ): """测试飞书连接是否正常。""" _ = current_user try: service = get_feishu_service(db) await service.load_config(tenant_id) manager = get_feishu_long_connection_manager() if not service.is_configured(): return { "status": "error", "message": "飞书未配置", } try: access_token = await service._get_tenant_access_token() event_mode = "long_connection" long_status = manager.status() if manager else None if not long_status: return { "status": "error", "message": "长连接管理器未初始化", "event_mode": event_mode, } if not long_status.get("sdk_available"): return { "status": "error", "message": "长连接 SDK 未安装(缺少 lark-oapi)", "event_mode": event_mode, "long_connection": long_status, } if not long_status.get("thread_alive"): message, detail = build_long_connection_failure(long_status) return { "status": "error", "message": message, "event_mode": event_mode, "long_connection": long_status, "detail": detail, } return { "status": "success", "message": "飞书连接正常", "has_token": bool(access_token), "mode": "long_connection", "event_mode": event_mode, "long_connection": long_status, } except Exception as token_error: return { "status": "error", "message": f"获取 Token 失败: {str(token_error)}", "hint": "请检查 App ID 和 App Secret 是否正确", } except Exception as exc: raise HTTPException(status_code=500, detail=f"测试连接失败: {str(exc)}")