keiro-dsl-0.15.0.0: test/fixtures/domain-command-outcomes.keiro
language keiro-dsl 5
context domain-outcomes
enum ReservationRejection { AlreadyCancelled=already-cancelled CapacityUnavailable=capacity-unavailable }
enum ReservationNoOp { DuplicateRequest=duplicate-request }
aggregate Reservation
domain-outcomes rejection=ReservationRejection no-op=ReservationNoOp
regs
lastRequestId Text = "none"
states Eligible CancelledState
command Cancel { requestId:Text }
event Cancelled = fields(Cancel)
Eligible -- Cancel -->
write lastRequestId := cmd.requestId
outcome accepted
emit Cancelled
goto CancelledState
CancelledState -- Cancel -->
guard cmd.requestId != reg.lastRequestId
outcome rejected ReservationRejection.AlreadyCancelled
goto CancelledState
CancelledState -- Cancel -->
guard cmd.requestId == reg.lastRequestId
outcome no-op ReservationNoOp.DuplicateRequest
goto CancelledState