ForcePilot/backend/package/yuxi/channel/domain/service/message_context.py
Kris 9a8a27bf36 feat(channel): 新增渠道网关模块完整实现
本次提交新增了完整的多渠道消息网关系统,包括:
1. 支持飞书、钉钉、Web、Hook 四种渠道的适配器与配置
2. 领域模型层:消息、会话、绑定、出箱等核心实体
3. 应用服务层:管道、中间件、DTO 与业务逻辑
4. 基础设施层:持久化、过滤器、队列等端口实现
5. 接口层:REST API、SSE、WebSocket 通信端点
6. 前端页面与路由配置,添加渠道管理菜单
7. 新增相关依赖包与 docker-compose 部署配置
2026-05-30 21:53:09 +08:00

45 lines
1.2 KiB
Python

from __future__ import annotations
import uuid
from dataclasses import dataclass, field
from yuxi.channel.domain.model.message.unified_message import UnifiedMessage
@dataclass
class Span:
middleware_name: str
started_at: float = 0.0
finished_at: float = 0.0
duration_ms: float = 0.0
aborted: bool = False
skipped: bool = False
@dataclass
class MessageContext:
message: UnifiedMessage
channel_type: str = ""
trace_id: str = field(default_factory=lambda: str(uuid.uuid4()))
spans: list[Span] = field(default_factory=list)
aborted: bool = field(default=False, init=False, repr=False)
skipped: bool = field(default=False, init=False, repr=False)
abort_reason: str = field(default="", init=False, repr=False)
abort_code: str = field(default="", init=False, repr=False)
@property
def is_aborted(self) -> bool:
return self.aborted
@property
def is_skipped(self) -> bool:
return self.skipped
def abort(self, reason: str, code: str = "") -> None:
self.aborted = True
self.abort_reason = reason
self.abort_code = code
def skip(self) -> None:
self.skipped = True