本次提交新增了完整的多渠道消息网关系统,包括: 1. 支持飞书、钉钉、Web、Hook 四种渠道的适配器与配置 2. 领域模型层:消息、会话、绑定、出箱等核心实体 3. 应用服务层:管道、中间件、DTO 与业务逻辑 4. 基础设施层:持久化、过滤器、队列等端口实现 5. 接口层:REST API、SSE、WebSocket 通信端点 6. 前端页面与路由配置,添加渠道管理菜单 7. 新增相关依赖包与 docker-compose 部署配置
45 lines
1.2 KiB
Python
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
|