31 lines
985 B
Python
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}
|