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