refactor: rename raise_event to apply_event and _events to _changes

This commit is contained in:
2026-07-29 10:40:04 -04:00
parent 5bb6cedd03
commit 7eace9212d
4 changed files with 24 additions and 24 deletions

View File

@@ -6,13 +6,13 @@ from domain.marketplace.domain_event import DomainEvent
class Entity(ABC): class Entity(ABC):
_events: tuple[DomainEvent, ...] = () _changes: tuple[DomainEvent, ...] = ()
def raise_event(self, event: DomainEvent) -> Self: def apply_event(self, event: DomainEvent) -> Self:
return replace(self, _events=(*self._events, event)) return replace(self, _changes=(*self._changes, event))
def get_changes(self) -> tuple[DomainEvent, ...]: def get_changes(self) -> tuple[DomainEvent, ...]:
return self._events return self._changes
def clear_changes(self) -> Self: def clear_changes(self) -> Self:
return replace(self, _events=()) return replace(self, _changes=())

View File

@@ -31,11 +31,11 @@ class ClassifiedAd(Entity):
text: ClassifiedAdText = field(default_factory=lambda: ClassifiedAdText(text="")) text: ClassifiedAdText = field(default_factory=lambda: ClassifiedAdText(text=""))
price: Price = field(default_factory=lambda: Price(amount=Decimal("0.00"))) price: Price = field(default_factory=lambda: Price(amount=Decimal("0.00")))
state: ClassifiedAdState = ClassifiedAdState.Inactive state: ClassifiedAdState = ClassifiedAdState.Inactive
_events: tuple[DomainEvent, ...] = () _changes: tuple[DomainEvent, ...] = ()
def __post_init__(self): def __post_init__(self):
if not self._events: if not self._changes:
object.__setattr__(self, '_events', ( object.__setattr__(self, '_changes', (
ClassifiedAdCreated(id=self.id.value, owner_id=self._ownerId.value), ClassifiedAdCreated(id=self.id.value, owner_id=self._ownerId.value),
)) ))
@@ -57,27 +57,27 @@ class ClassifiedAd(Entity):
self._ensure_valid_state() self._ensure_valid_state()
updated = replace(self, state=ClassifiedAdState.PendingReview) updated = replace(self, state=ClassifiedAdState.PendingReview)
return updated.raise_event( return updated.apply_event(
ClassifiedAdSentForReview(id=self.id.value) ClassifiedAdSentForReview(id=self.id.value)
) )
def set_title(self, title: ClassifiedAdTitle) -> ClassifiedAd: def set_title(self, title: ClassifiedAdTitle) -> ClassifiedAd:
updated = replace(self, title=title) updated = replace(self, title=title)
updated._ensure_valid_state() updated._ensure_valid_state()
return updated.raise_event( return updated.apply_event(
ClassifiedAdTitleChanged(id=self.id.value, title=title.title) ClassifiedAdTitleChanged(id=self.id.value, title=title.title)
) )
def update_text(self, text: ClassifiedAdText) -> ClassifiedAd: def update_text(self, text: ClassifiedAdText) -> ClassifiedAd:
updated = replace(self, text=text) updated = replace(self, text=text)
updated._ensure_valid_state() updated._ensure_valid_state()
return updated.raise_event( return updated.apply_event(
ClassifiedAdTextUpdated(id=self.id.value, ad_text=text.text) ClassifiedAdTextUpdated(id=self.id.value, ad_text=text.text)
) )
def update_price(self, price: Price) -> ClassifiedAd: def update_price(self, price: Price) -> ClassifiedAd:
updated = replace(self, price=price) updated = replace(self, price=price)
updated._ensure_valid_state() updated._ensure_valid_state()
return updated.raise_event( return updated.apply_event(
ClassifiedAdPriceUpdated(id=self.id.value, price=price.amount) ClassifiedAdPriceUpdated(id=self.id.value, price=price.amount)
) )

View File

@@ -248,7 +248,7 @@ def test_classified_ad_is_instance_of_entity():
assert isinstance(ad, Entity) assert isinstance(ad, Entity)
def test_classified_ad_can_use_entity_raise_event(): def test_classified_ad_can_use_entity_apply_event():
ad = ClassifiedAd( ad = ClassifiedAd(
id=ClassifiedAdId(value=uuid4()), id=ClassifiedAdId(value=uuid4()),
_ownerId=UserId(value=uuid4()), _ownerId=UserId(value=uuid4()),
@@ -258,7 +258,7 @@ def test_classified_ad_can_use_entity_raise_event():
) )
event = ClassifiedAdSentForReview(id=ad.id.value) event = ClassifiedAdSentForReview(id=ad.id.value)
updated_ad = ad.raise_event(event) updated_ad = ad.apply_event(event)
assert updated_ad.get_changes() == (ad.get_changes()[0], event) assert updated_ad.get_changes() == (ad.get_changes()[0], event)
assert len(ad.get_changes()) == 1 assert len(ad.get_changes()) == 1

View File

@@ -12,7 +12,7 @@ from domain.marketplace.domain_event import (
@dataclass(frozen=True) @dataclass(frozen=True)
class TestEntity(Entity): class TestEntity(Entity):
__test__ = False __test__ = False
_events: tuple[DomainEvent, ...] = () _changes: tuple[DomainEvent, ...] = ()
def test_entity_creation(): def test_entity_creation():
@@ -20,20 +20,20 @@ def test_entity_creation():
assert entity.get_changes() == () assert entity.get_changes() == ()
def test_raise_event_returns_new_instance_with_event(): def test_apply_event_returns_new_instance_with_event():
entity = TestEntity() entity = TestEntity()
event = ClassifiedAdCreated(id=uuid4(), owner_id=uuid4()) event = ClassifiedAdCreated(id=uuid4(), owner_id=uuid4())
new_entity = entity.raise_event(event) new_entity = entity.apply_event(event)
assert new_entity.get_changes() == (event,) assert new_entity.get_changes() == (event,)
def test_raise_event_does_not_mutate_original(): def test_apply_event_does_not_mutate_original():
entity = TestEntity() entity = TestEntity()
event = ClassifiedAdCreated(id=uuid4(), owner_id=uuid4()) event = ClassifiedAdCreated(id=uuid4(), owner_id=uuid4())
entity.raise_event(event) entity.apply_event(event)
assert entity.get_changes() == () assert entity.get_changes() == ()
@@ -43,8 +43,8 @@ def test_multiple_events_accumulate():
event1 = ClassifiedAdCreated(id=uuid4(), owner_id=uuid4()) event1 = ClassifiedAdCreated(id=uuid4(), owner_id=uuid4())
event2 = ClassifiedAdSentForReview(id=uuid4()) event2 = ClassifiedAdSentForReview(id=uuid4())
entity = entity.raise_event(event1) entity = entity.apply_event(event1)
entity = entity.raise_event(event2) entity = entity.apply_event(event2)
assert entity.get_changes() == (event1, event2) assert entity.get_changes() == (event1, event2)
@@ -52,7 +52,7 @@ def test_multiple_events_accumulate():
def test_clear_changes_returns_instance_with_empty_events(): def test_clear_changes_returns_instance_with_empty_events():
entity = TestEntity() entity = TestEntity()
event = ClassifiedAdCreated(id=uuid4(), owner_id=uuid4()) event = ClassifiedAdCreated(id=uuid4(), owner_id=uuid4())
entity = entity.raise_event(event) entity = entity.apply_event(event)
cleared = entity.clear_changes() cleared = entity.clear_changes()
@@ -62,7 +62,7 @@ def test_clear_changes_returns_instance_with_empty_events():
def test_clear_changes_does_not_mutate_original(): def test_clear_changes_does_not_mutate_original():
entity = TestEntity() entity = TestEntity()
event = ClassifiedAdCreated(id=uuid4(), owner_id=uuid4()) event = ClassifiedAdCreated(id=uuid4(), owner_id=uuid4())
entity = entity.raise_event(event) entity = entity.apply_event(event)
entity.clear_changes() entity.clear_changes()
@@ -72,7 +72,7 @@ def test_clear_changes_does_not_mutate_original():
def test_get_changes_returns_tuple(): def test_get_changes_returns_tuple():
entity = TestEntity() entity = TestEntity()
event = ClassifiedAdCreated(id=uuid4(), owner_id=uuid4()) event = ClassifiedAdCreated(id=uuid4(), owner_id=uuid4())
entity = entity.raise_event(event) entity = entity.apply_event(event)
changes = entity.get_changes() changes = entity.get_changes()