packages feed

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))