ForcePilot/backend/package/yuxi/external_systems/use_cases/events.py

332 lines
5.6 KiB
Python
Raw Normal View History

"""领域事件 dataclass 定义。
规范 §6.1/§7.1用例在事务内调用 event_publisher.publish发布聚合产生的领域事件
所有事件为不可变 dataclassfrozen=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