keiro-dsl-0.15.0.0: test/fixtures/subscription.keiro
language keiro-dsl 4
context billing
id SubscriptionId prefix=sub
id CustomerId prefix=cust
enum Plan { Paid=paid Free=free }
aggregate Subscription
regs
plan Plan = Free
states Inactive Active Closed!
command ActivateSubscription { subscriptionId customerId plan }
command CancelSubscription { subscriptionId customerId }
event SubscriptionActivated = fields(ActivateSubscription)
event SubscriptionCancelled { subscriptionId customerId }
Inactive -- ActivateSubscription -->
guard cmd.plan != Plan.Free
emit SubscriptionActivated
goto Active
Active -- CancelSubscription --> emit SubscriptionCancelled ; goto Closed
wire kind=ctorName fields=camelCase schemaVersion=1
projection subscriptions key=subscriptionId
status-map { SubscriptionActivated=>active SubscriptionCancelled=>cancelled }