Source code for examples.shopvertical.slices.clear_cart.cmd

from __future__ import annotations

from uuid import UUID  # noqa: TC003

from examples.shopvertical.common import Command, get_events, put_events
from examples.shopvertical.events import ClearedCart, DomainEvents, SubmittedCart
from examples.shopvertical.exceptions import CartAlreadySubmittedError


[docs] class ClearCart(Command): cart_id: UUID
[docs] def handle(self, events: DomainEvents) -> DomainEvents: is_submitted = False for event in events: if isinstance(event, SubmittedCart): is_submitted = True if is_submitted: raise CartAlreadySubmittedError return ( ClearedCart( originator_id=self.cart_id, originator_version=len(events) + 1, ), )
[docs] def execute(self) -> int | None: return put_events(self.handle(get_events(self.cart_id)))