Source code for src.share_kernel.domain.base_aggregate
import uuid
from typing import TYPE_CHECKING
from src.share_kernel.domain.base_entity import Entity
if TYPE_CHECKING:
from src.share_kernel.domain.domain_event import DomainEvent
[docs]
class AggregateRoot(Entity):
"""
Base pour tous les agrégats.
Collecte les domain events et les expose pour dispatch après persistance.
"""
def __init__(self, entity_id: uuid.UUID | None = None):
super().__init__(entity_id)
self._domain_events: list["DomainEvent"] = []
[docs]
def _record_event(self, event: "DomainEvent") -> None:
self._domain_events.append(event)
[docs]
def pull_domain_events(self) -> list["DomainEvent"]:
"""Retourne et vide la liste des events en attente."""
events = list(self._domain_events)
self._domain_events.clear()
return events