keiro-dsl-0.17.0.0: test/conformance-process-reactions/Generated/ProcessReactions/IncidentReaction/Process.hs
{-# OPTIONS_GHC -Wno-missing-signatures #-}
-- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 6) from process reaction IncidentReaction; do not edit.
module Generated.ProcessReactions.IncidentReaction.Process
( IncidentReactionInput (..)
, incidentReactionProcessName
, incidentReactionCategory
, incidentReactionProcessWorkerOptions
, incidentReactionReactionVersion
, incidentReactionReactionFingerprint
, incidentReactionReact
, incidentReactionProcessManager
, incidentReactionRunProcessWorker
) where
import Data.Text (Text)
import Numeric.Natural (Natural)
import Generated.ProcessReactions.IncidentReaction.Input (IncidentReactionInput (..))
import ProcessReactions.IncidentReaction.ProcessHoles (decodeIncidentReactionInput)
import Generated.ProcessReactions.IncidentSaga.Domain qualified as Saga
import Generated.ProcessReactions.IncidentSaga.EventStream (incidentSagaEventStream, IncidentSagaEventStreamDef)
import Generated.ProcessReactions.Incident.Domain qualified as Target
import Generated.ProcessReactions.Incident.EventStream (incidentCommandCategory, incidentEventStream)
import Generated.ProcessReactions.Nominals qualified as N
import Keiro.Command (DomainCommandHandler (..), SilentDomainDecision (..))
import Keiro.ProcessManager (PMCommand (..))
import Keiro.ProcessManager.Reaction qualified as Reaction
import Keiro.Stream qualified as Stream
import Keiro.ProcessManager (PoisonPolicy (..), RejectedCommandPolicy (..), WorkerOptions (..))
import Shibuya.Core.Ack (RetryDelay (..))
incidentReactionProcessName :: Text
incidentReactionProcessName = "incident-reaction"
incidentReactionCategory :: Stream.StreamCategory IncidentSagaEventStreamDef
incidentReactionCategory = Stream.categoryUnsafe "incidentSaga"
incidentReactionProcessWorkerOptions :: WorkerOptions es msg
incidentReactionProcessWorkerOptions =
WorkerOptions
{ poisonPolicy = PoisonHalt,
rejectedCommandPolicy = RejectedHalt,
transientRetryDelay = RetryDelay 5, -- matches defaultWorkerOptions; runtime tuning
metrics = Nothing -- runtime configuration; install at call site
}
incidentReactionReactionVersion :: Natural
incidentReactionReactionVersion = 1
incidentReactionReactionFingerprint :: Text
incidentReactionReactionFingerprint = "dff4a685084373ac102b8fa9591bc4cdbaa358a19bdec488ea157bd038421573"
incidentReactionCorrelate :: IncidentReactionInput -> Text
incidentReactionCorrelate input = case input of
IncidentReported { incidentId } -> (N.incidentIdText incidentId)
IncidentNoted { incidentId } -> (N.incidentIdText incidentId)
incidentReactionReact :: IncidentReactionInput -> Reaction.ReactionPlan Saga.IncidentSagaCommand Target.IncidentCommand
incidentReactionReact input = case input of
IncidentReported { incidentId, severity }
| (severity == N.Sev1) -> Reaction.AdvanceReaction { command = Saga.RecordCritical (Saga.RecordCriticalData { Saga.incidentId = incidentId }), followUps = [Reaction.FollowDispatch (PMCommand (Stream.entityStream incidentCommandCategory (N.incidentIdText incidentId)) (Target.EscalateIncident (Target.EscalateIncidentData { Target.incidentId = incidentId })))], onAccepted = [] }
| otherwise -> Reaction.AdvanceReaction { command = Saga.RecordRoutine (Saga.RecordRoutineData { Saga.incidentId = incidentId }), followUps = [], onAccepted = [] }
IncidentNoted {}
-> Reaction.NoAdvance []
incidentReactionProcessManager =
Reaction.ReactiveProcessManager
{ name = incidentReactionProcessName
, correlate = incidentReactionCorrelate
, sagaHandler = DomainCommandHandler { eventStream = incidentSagaEventStream, classifySilent = \_ -> SilentNoOp () }
, streamFor = Stream.entityStream incidentReactionCategory
, targetEventStream = incidentEventStream
, targetProjections = const []
, react = incidentReactionReact
}
incidentReactionRunProcessWorker options adapter =
Reaction.runReactiveProcessManagerWorkerWith
incidentReactionProcessWorkerOptions
options
incidentReactionProcessManager
adapter
(\event -> case decodeIncidentReactionInput event of Nothing -> Nothing; Just input -> Just (event, input))