PMFlow/backend/app/core/events_models.py

77 lines
2.2 KiB
Python

"""Core event models and enums."""
from __future__ import annotations
from dataclasses import dataclass, field
from enum import Enum
from typing import Any, Optional
from ..utils.timezone import now_cn_aware
class EventType(Enum):
"""系统事件类型定义"""
SIGNAL_INGESTED = "signal.ingested"
SIGNAL_ANALYZED = "signal.analyzed"
SIGNAL_FEEDBACK = "signal.feedback"
SIGNAL_PRIORITY_CHANGED = "signal.priority_changed"
TASK_ASSIGNED = "task.assigned"
TASK_STARTED = "task.started"
TASK_COMPLETED = "task.completed"
TASK_FAILED = "task.failed"
CODE_COMMIT = "code.commit"
CODE_REVIEW_REQUESTED = "code.review_requested"
CODE_DRAFT_GENERATED = "code.draft_generated"
AUDIT_STARTED = "audit.started"
AUDIT_COMPLETED = "audit.completed"
AUDIT_FAILED = "audit.failed"
AUTO_MERGE_REQUESTED = "auto_merge.requested"
AUTO_MERGE_SUCCESS = "auto_merge.success"
AUTO_MERGE_FAILED = "auto_merge.failed"
AUTO_MERGE_COOLDOWN = "auto_merge.cooldown"
PLANE_SYNC_SUCCESS = "integration.plane.success"
PLANE_SYNC_FAILED = "integration.plane.failed"
LARK_NOTIFY_SUCCESS = "integration.lark.success"
LARK_NOTIFY_FAILED = "integration.lark.failed"
DOMAIN_CREATED = "domain.created"
DOMAIN_UPDATED = "domain.updated"
DOMAIN_DELETED = "domain.deleted"
DOMAIN_SWITCHED = "domain.switched"
DOMAIN_SYNCING = "domain.syncing"
DOMAIN_SYNCED = "domain.synced"
PROJECT_CREATED = "project.created"
PROJECT_UPDATED = "project.updated"
PROJECT_DELETED = "project.deleted"
SIGNAL_LINKED = "signal.linked"
SIGNAL_UNLINKED = "signal.unlinked"
@dataclass
class Event:
"""事件数据结构"""
type: EventType
data: dict[str, Any]
timestamp: float = field(default_factory=lambda: now_cn_aware().timestamp())
source: Optional[str] = None
correlation_id: Optional[str] = None
metadata: dict[str, Any] = field(default_factory=dict)
def to_dict(self) -> dict[str, Any]:
return {
"type": self.type.value,
"data": self.data,
"timestamp": self.timestamp,
"source": self.source,
"correlation_id": self.correlation_id,
"metadata": self.metadata,
}