packages feed

keiro-dsl-0.17.0.0: test/fixtures/workspace-nominals/domain/project.keiro

language keiro-dsl 6
context workspace-nominal-proof

mapped structural record ProjectClaim {
  haskell package=keiro-dsl module=WorkspaceNominalProof.Domain type=ProjectClaim
  binding = "WorkspaceNominalProof.Bindings.projectClaimBinding"
  binding-version = "1"
  canonical-type = "workspace-nominal-proof.ProjectClaim.v1"
  fixtures = "WorkspaceNominalProof.Bindings.projectClaimFixtures"
  wire object constructor=ProjectClaim unknown-fields=reject {
    claimId as "claimId" : ClaimId required
  }
}

aggregate Project
  regs
    projectId ProjectId = placeholder
    phase ProjectPhase = Draft
  states Empty Live Archived!

  command RegisterProject { projectId phase:ProjectPhase claim:ProjectClaim }
  command ArchiveProject { projectId phase:ProjectPhase }
  event ProjectRegistered = fields(RegisterProject)
  event ArchivalRecorded = fields(ArchiveProject)

  Empty -- RegisterProject -->
    guard cmd.projectId == reg.projectId && cmd.phase == reg.phase
    write projectId := cmd.projectId
    write phase := cmd.phase
    emit ProjectRegistered
    goto Live

  Live -- ArchiveProject -->
    guard cmd.projectId == reg.projectId && cmd.phase == reg.phase
    emit ArchivalRecorded
    goto Archived

  wire kind=ctorName fields=camelCase schemaVersion=1