From b2e5cc187c5030104bfc24c4d9623cfbc4612e7a Mon Sep 17 00:00:00 2001 From: marsal Date: Fri, 10 Jul 2026 11:56:28 +0800 Subject: [PATCH] feat(event): add outbound event models --- channel-service/app/models/event.py | 44 +++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 channel-service/app/models/event.py diff --git a/channel-service/app/models/event.py b/channel-service/app/models/event.py new file mode 100644 index 0000000..e046c0e --- /dev/null +++ b/channel-service/app/models/event.py @@ -0,0 +1,44 @@ +from __future__ import annotations + +import uuid +from dataclasses import dataclass, field +from datetime import datetime, timezone +from enum import Enum +from typing import Any + + +class EventType(str, Enum): + HEARTBEAT = "heartbeat" + LOGIN_STATUS_CHANGED = "login_status_changed" + ONLINE_STATUS_CHANGED = "online_status_changed" + SEND_RESULT = "send_result" + ERROR = "error" + + +class EventStatus(str, Enum): + PENDING = "pending" + RETRYING = "retrying" + DELIVERED = "delivered" + DEAD_LETTER = "dead_letter" + + +@dataclass +class OutboundEvent: + event_type: EventType + account_id: str + tenant_code: str + data: dict[str, Any] + event_id: str = field(default_factory=lambda: str(uuid.uuid4())) + timestamp: datetime = field( + default_factory=lambda: datetime.now(timezone.utc) + ) + + def to_payload(self) -> dict[str, Any]: + return { + "event_id": self.event_id, + "event_type": self.event_type.value, + "account_id": self.account_id, + "tenant_code": self.tenant_code, + "timestamp": self.timestamp.isoformat(), + "data": self.data, + }