新增六边形架构核心代码包,包含: 1. 协议适配器层:HTTP/SMTP/IMAP/SSH/GRPC等多协议适配器实现 2. 认证插件体系:基础认证、API密钥、HMAC等多类型认证插件 3. 执行编排框架:工具执行器、上下文构建、运行时治理组件 4. 用例端口与DTO:定义领域服务端口与数据传输对象 5. 厂商集成包框架:支持第三方系统集成扩展 6. 基础设施装配层:实现依赖注入与服务装配 所有代码遵循六边形架构设计原则,实现端口与适配器解耦,支持动态扩展与自动发现。
332 lines
5.6 KiB
Python
332 lines
5.6 KiB
Python
"""领域事件 dataclass 定义。
|
||
|
||
规范 §6.1/§7.1:用例在事务内调用 event_publisher.publish,发布聚合产生的领域事件。
|
||
所有事件为不可变 dataclass(frozen=True)。
|
||
"""
|
||
|
||
from __future__ import annotations
|
||
|
||
from dataclasses import dataclass
|
||
from datetime import datetime
|
||
|
||
|
||
# ========== 系统子域 ==========
|
||
@dataclass(frozen=True)
|
||
class SystemCreated:
|
||
"""系统创建事件。"""
|
||
|
||
system_id: int
|
||
slug: str
|
||
|
||
|
||
@dataclass(frozen=True)
|
||
class SystemUpdated:
|
||
system_id: int
|
||
slug: str
|
||
|
||
|
||
@dataclass(frozen=True)
|
||
class SystemDeleted:
|
||
system_id: int
|
||
slug: str
|
||
|
||
|
||
@dataclass(frozen=True)
|
||
class SystemStatusChanged:
|
||
system_id: int
|
||
slug: str
|
||
enabled: bool
|
||
|
||
|
||
# ========== 工具子域 ==========
|
||
@dataclass(frozen=True)
|
||
class ToolCreated:
|
||
tool_slug: str
|
||
system_id: int | None
|
||
|
||
|
||
@dataclass(frozen=True)
|
||
class ToolUpdated:
|
||
tool_slug: str
|
||
system_id: int | None
|
||
|
||
|
||
@dataclass(frozen=True)
|
||
class ToolDeleted:
|
||
tool_slug: str
|
||
system_id: int | None
|
||
|
||
|
||
@dataclass(frozen=True)
|
||
class ToolExecuted:
|
||
execution_id: str
|
||
tool_slug: str
|
||
status: str
|
||
|
||
|
||
# ========== 环境子域 ==========
|
||
@dataclass(frozen=True)
|
||
class EnvironmentCreated:
|
||
environment_id: int
|
||
system_id: int
|
||
env_key: str
|
||
|
||
|
||
@dataclass(frozen=True)
|
||
class EnvironmentUpdated:
|
||
environment_id: int
|
||
system_id: int
|
||
env_key: str
|
||
|
||
|
||
@dataclass(frozen=True)
|
||
class EnvironmentDeleted:
|
||
environment_id: int
|
||
system_id: int
|
||
env_key: str
|
||
|
||
|
||
@dataclass(frozen=True)
|
||
class EnvironmentStatusChanged:
|
||
environment_id: int
|
||
system_id: int
|
||
env_key: str
|
||
enabled: bool
|
||
|
||
|
||
# ========== Token 子域 ==========
|
||
@dataclass(frozen=True)
|
||
class TokenInvalidated:
|
||
system_id: int
|
||
env_key: str | None
|
||
|
||
|
||
# ========== 执行子域 ==========
|
||
@dataclass(frozen=True)
|
||
class ExecutionRetried:
|
||
execution_id: str
|
||
retry_of: str
|
||
|
||
|
||
@dataclass(frozen=True)
|
||
class ExecutionCleanedUp:
|
||
affected: int
|
||
|
||
|
||
# ========== 资产子域 ==========
|
||
@dataclass(frozen=True)
|
||
class AssetCreated:
|
||
asset_id: int
|
||
asset_type: str
|
||
|
||
|
||
@dataclass(frozen=True)
|
||
class AssetUpdated:
|
||
asset_id: int
|
||
asset_type: str
|
||
|
||
|
||
@dataclass(frozen=True)
|
||
class AssetDeleted:
|
||
asset_id: int
|
||
asset_type: str
|
||
|
||
|
||
# ========== 导入子域 ==========
|
||
@dataclass(frozen=True)
|
||
class ImportConfirmed:
|
||
system_slug: str
|
||
tool_count: int
|
||
|
||
|
||
# ========== Webhook 子域 ==========
|
||
@dataclass(frozen=True)
|
||
class WebhookSubscriptionCreated:
|
||
subscription_slug: str
|
||
|
||
|
||
@dataclass(frozen=True)
|
||
class WebhookSubscriptionUpdated:
|
||
subscription_slug: str
|
||
|
||
|
||
@dataclass(frozen=True)
|
||
class WebhookSubscriptionDeleted:
|
||
subscription_slug: str
|
||
|
||
|
||
@dataclass(frozen=True)
|
||
class WebhookEventReceived:
|
||
subscription_slug: str
|
||
external_event_id: str | None
|
||
|
||
|
||
# ========== 配额子域 ==========
|
||
@dataclass(frozen=True)
|
||
class QuotaConfigured:
|
||
quota_id: int
|
||
resource: str
|
||
|
||
|
||
@dataclass(frozen=True)
|
||
class QuotaThresholdChanged:
|
||
quota_id: int
|
||
resource: str
|
||
threshold: int
|
||
|
||
|
||
@dataclass(frozen=True)
|
||
class QuotaDeleted:
|
||
quota_id: int
|
||
resource: str
|
||
|
||
|
||
# ========== 告警子域 ==========
|
||
@dataclass(frozen=True)
|
||
class AlertFired:
|
||
alert_id: int
|
||
alert_type: str
|
||
severity: str
|
||
|
||
|
||
@dataclass(frozen=True)
|
||
class AlertAcknowledged:
|
||
alert_id: int
|
||
|
||
|
||
@dataclass(frozen=True)
|
||
class AlertResolved:
|
||
alert_id: int
|
||
|
||
|
||
# ========== 通知子域 ==========
|
||
@dataclass(frozen=True)
|
||
class NotificationSent:
|
||
notification_id: int
|
||
channel: str
|
||
|
||
|
||
@dataclass(frozen=True)
|
||
class NotificationChannelCreated:
|
||
channel_id: int
|
||
channel_type: str
|
||
|
||
|
||
@dataclass(frozen=True)
|
||
class NotificationChannelUpdated:
|
||
channel_id: int
|
||
channel_type: str
|
||
|
||
|
||
@dataclass(frozen=True)
|
||
class NotificationChannelDeleted:
|
||
channel_id: int
|
||
|
||
|
||
# ========== 密钥轮换子域 ==========
|
||
@dataclass(frozen=True)
|
||
class SecretRotated:
|
||
policy_id: int
|
||
system_id: int
|
||
|
||
|
||
@dataclass(frozen=True)
|
||
class SecretRotationPolicyCreated:
|
||
policy_id: int
|
||
system_id: int
|
||
|
||
|
||
@dataclass(frozen=True)
|
||
class SecretRotationPolicyUpdated:
|
||
policy_id: int
|
||
system_id: int
|
||
|
||
|
||
@dataclass(frozen=True)
|
||
class SecretRotationPolicyDeleted:
|
||
policy_id: int
|
||
|
||
|
||
# ========== 访问规则子域 ==========
|
||
@dataclass(frozen=True)
|
||
class AccessRuleCreated:
|
||
rule_id: int
|
||
tool_slug: str
|
||
|
||
|
||
@dataclass(frozen=True)
|
||
class AccessRuleUpdated:
|
||
rule_id: int
|
||
tool_slug: str
|
||
|
||
|
||
@dataclass(frozen=True)
|
||
class AccessRuleDeleted:
|
||
rule_id: int
|
||
|
||
|
||
# ========== 测试用例子域 ==========
|
||
@dataclass(frozen=True)
|
||
class TestCaseCreated:
|
||
__test__ = False # 避免 pytest 误收集为测试类
|
||
|
||
test_case_id: int
|
||
tool_slug: str
|
||
|
||
|
||
@dataclass(frozen=True)
|
||
class TestCaseUpdated:
|
||
__test__ = False # 避免 pytest 误收集为测试类
|
||
|
||
test_case_id: int
|
||
tool_slug: str
|
||
|
||
|
||
@dataclass(frozen=True)
|
||
class TestCaseDeleted:
|
||
__test__ = False # 避免 pytest 误收集为测试类
|
||
|
||
test_case_id: int
|
||
|
||
|
||
@dataclass(frozen=True)
|
||
class RegressionCompleted:
|
||
"""测试回归批量执行完成事件。"""
|
||
|
||
due_count: int
|
||
succeeded: int
|
||
failed: int
|
||
|
||
|
||
# ========== 集成工具子域 ==========
|
||
@dataclass(frozen=True)
|
||
class IntegrationToolsPersisted:
|
||
integration_slug: str
|
||
tool_count: int
|
||
|
||
|
||
# ========== 回收站子域 ==========
|
||
@dataclass(frozen=True)
|
||
class ResourceRestored:
|
||
"""资源从回收站恢复事件。"""
|
||
|
||
resource_type: str
|
||
resource_id: int
|
||
|
||
|
||
@dataclass(frozen=True)
|
||
class ResourceHardDeleted:
|
||
"""资源从回收站物理删除事件。"""
|
||
|
||
resource_type: str
|
||
resource_id: int
|
||
|
||
|
||
@dataclass(frozen=True)
|
||
class TrashPurged:
|
||
"""回收站批量清理事件。"""
|
||
|
||
purged_count: int
|
||
by_type: dict[str, int]
|
||
cutoff_at: datetime
|