Source code for subscriptionkore.core.events.base

"""Base domain event."""

from __future__ import annotations

from datetime import datetime
from typing import Any

from pydantic import BaseModel, Field
from ulid import ULID


[docs] class DomainEvent(BaseModel): """Base class for all domain events.""" event_id: str = Field(default_factory=lambda: str(ULID())) event_type: str = "" occurred_at: datetime = Field(default_factory=datetime.utcnow) metadata: dict[str, Any] = Field(default_factory=dict) def __init_subclass__(cls, **kwargs: Any) -> None: super().__init_subclass__(**kwargs) # Auto-set event_type from class name if not cls.__dict__.get("event_type"): cls.model_fields["event_type"].default = cls.__name__ model_config = {"frozen": True}