packages feed

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 }