keiro-dsl-0.17.0.0: test/conformance-process-reactions/Generated/ProcessReactions/AuditOnly/Process.hs
{-# OPTIONS_GHC -Wno-missing-signatures #-}
-- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 6) from process reaction AuditOnly; do not edit.
module Generated.ProcessReactions.AuditOnly.Process
( AuditOnlyInput (..)
, auditOnlyProcessName
, auditOnlyCategory
, auditOnlyProcessWorkerOptions
, auditOnlyReactionVersion
, auditOnlyReactionFingerprint
, auditOnlyReact
, auditOnlyProcessManager
, auditOnlyRunProcessWorker
) where
import Data.Text (Text)
import Numeric.Natural (Natural)
import Generated.ProcessReactions.AuditOnly.Input (AuditOnlyInput (..))
import ProcessReactions.AuditOnly.ProcessHoles (decodeAuditOnlyInput)
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 (incidentEventStream)
import Generated.ProcessReactions.Nominals qualified as N
import Keiro.Command (DomainCommandHandler (..), SilentDomainDecision (..))
import Keiro.ProcessManager.Reaction qualified as Reaction
import Keiro.Stream qualified as Stream
import Keiro.ProcessManager (PoisonPolicy (..), RejectedCommandPolicy (..), WorkerOptions (..))
import Shibuya.Core.Ack (RetryDelay (..))
auditOnlyProcessName :: Text
auditOnlyProcessName = "audit-only"
auditOnlyCategory :: Stream.StreamCategory IncidentSagaEventStreamDef
auditOnlyCategory = Stream.categoryUnsafe "incidentAudit"
auditOnlyProcessWorkerOptions :: WorkerOptions es msg
auditOnlyProcessWorkerOptions =
WorkerOptions
{ poisonPolicy = PoisonHalt,
rejectedCommandPolicy = RejectedHalt,
transientRetryDelay = RetryDelay 5, -- matches defaultWorkerOptions; runtime tuning
metrics = Nothing -- runtime configuration; install at call site
}
auditOnlyReactionVersion :: Natural
auditOnlyReactionVersion = 1
auditOnlyReactionFingerprint :: Text
auditOnlyReactionFingerprint = "a98c341339b007c1e28edff6a1a89b91a9dd3ac63c83bfe57e6b41479d84af96"
auditOnlyCorrelate :: AuditOnlyInput -> Text
auditOnlyCorrelate input = case input of
IncidentNoted { incidentId } -> (N.incidentIdText incidentId)
auditOnlyReact :: AuditOnlyInput -> Reaction.ReactionPlan Saga.IncidentSagaCommand Target.IncidentCommand
auditOnlyReact input = case input of
IncidentNoted {}
-> Reaction.NoAdvance []
auditOnlyProcessManager =
Reaction.ReactiveProcessManager
{ name = auditOnlyProcessName
, correlate = auditOnlyCorrelate
, sagaHandler = DomainCommandHandler { eventStream = incidentSagaEventStream, classifySilent = \_ -> SilentNoOp () }
, streamFor = Stream.entityStream auditOnlyCategory
, targetEventStream = incidentEventStream
, targetProjections = const []
, react = auditOnlyReact
}
auditOnlyRunProcessWorker options adapter =
Reaction.runReactiveProcessManagerWorkerWith
auditOnlyProcessWorkerOptions
options
auditOnlyProcessManager
adapter
(\event -> case decodeAuditOnlyInput event of Nothing -> Nothing; Just input -> Just (event, input))