feat(event): add outbound event models
This commit is contained in:
44
channel-service/app/models/event.py
Normal file
44
channel-service/app/models/event.py
Normal file
@@ -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,
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user