83 lines
2.9 KiB
Python
83 lines
2.9 KiB
Python
"""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.integrations.feishu_integration_service import get_feishu_service
|
||
from ...services.integrations.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)}")
|