keiro-dsl-0.17.0.0: test/fixtures/hospital-surge-reactions.keiro
language keiro-dsl 6
context hospital-capacity
id HospitalId prefix=hosp
id CommandId prefix=cmd
process HospitalSurge
name "hospital-surge"
reactions version 1
input SurgeInput { hospitalId:HospitalId availableIcuBeds:Int redDemand:Int observedAt:Time }
correlate input.hospitalId via idText
saga Surge category "hospitalSurge"
target Hospital
projections [ ]
on SurgeInput
advance NoteSurgeThreshold { hospitalId availableIcuBeds redDemand timerId=input.hospitalId }
dispatch Hospital@input.hospitalId ActivateSurge { hospitalId }
on-appended AckOk ; on-duplicate AckOk ; on-failed Retry
dispatch-id strategy=uuidv5 from=(name, correlationId, sourceEventId, targetStreamName, occurrence)
rejected => halt
poison => halt
aggregate Surge
regs
states Idle
command NoteSurgeThreshold { hospitalId availableIcuBeds:Int redDemand:Int timerId:HospitalId }
command MarkSurgeTimerFired { hospitalId timerId:HospitalId }
event SurgeThresholdNoted = fields(NoteSurgeThreshold)
event SurgeTimerMarked = fields(MarkSurgeTimerFired)
Idle -- NoteSurgeThreshold --> emit SurgeThresholdNoted ; goto Idle
Idle -- MarkSurgeTimerFired --> emit SurgeTimerMarked ; goto Idle
aggregate Hospital
regs
states Operational
command ActivateSurge { hospitalId }
event SurgeActivated = fields(ActivateSurge)
Operational -- ActivateSurge --> emit SurgeActivated ; goto Operational