approval/app/api/feishu_events.py

31 lines
985 B
Python

from __future__ import annotations
import logging
from fastapi import APIRouter, HTTPException, Request
from app.schemas.feishu_events import FeishuEventRequest
from app.services.approval_sync_service import ApprovalSyncService
from app.services.feishu_service import FeishuService
router = APIRouter()
feishu_service = FeishuService()
approval_service = ApprovalSyncService()
logger = logging.getLogger(__name__)
@router.post("/feishu/events")
async def feishu_events(request: Request):
body = await request.json()
event_req = FeishuEventRequest(**body)
if event_req.challenge:
return {"challenge": event_req.challenge}
if not feishu_service.verify_event(body):
raise HTTPException(status_code=403, detail="invalid token")
event_payload = body.get("event", body)
try:
await approval_service.handle_event(event_payload)
except Exception as exc:
logger.error("审批事件处理失败: %s", exc)
return {"ok": True}