packages feed

keiro-dsl-0.18.0.0: test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayReaction/Process.hs

{-# OPTIONS_GHC -Wno-missing-signatures #-}
-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from process reaction ReplayReaction; do not edit.
module Generated.CheckedMappingReplay.ReplayReaction.Process
  ( ReplayReactionInput (..)
  , replayReactionProcessName
  , replayReactionCategory
  , replayReactionProcessWorkerOptions
  , replayReactionReactionVersion
  , replayReactionReactionFingerprint
  , replayReactionReact
  , replayReactionProcessManager
  , replayReactionRunProcessWorker
  ) where

import Data.Text (Text)
import Numeric.Natural (Natural)
import Generated.CheckedMappingReplay.ReplayReaction.Input (ReplayReactionInput (..))
import CheckedMappingReplay.ReplayReaction.ProcessHoles (decodeReplayReactionInput)
import Generated.CheckedMappingReplay.ReplayLedger.Domain qualified as Saga
import Generated.CheckedMappingReplay.ReplayLedger.EventStream (replayLedgerEventStream, ReplayLedgerEventStreamDef)
import Generated.CheckedMappingReplay.ReplayTarget.Domain qualified as Target
import Generated.CheckedMappingReplay.ReplayTarget.EventStream (replayTargetCommandCategory, replayTargetEventStream)
import Generated.CheckedMappingReplay.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 (..))

replayReactionProcessName :: Text
replayReactionProcessName = "checked-mapping-replay-reaction"

replayReactionCategory :: Stream.StreamCategory ReplayLedgerEventStreamDef
replayReactionCategory = Stream.categoryUnsafe "checkedMappingReplaySaga"

replayReactionProcessWorkerOptions :: WorkerOptions es msg
replayReactionProcessWorkerOptions =
  WorkerOptions
    { poisonPolicy = PoisonHalt,
      rejectedCommandPolicy = RejectedHalt,
      transientRetryDelay = RetryDelay 5, -- matches defaultWorkerOptions; runtime tuning
      metrics = Nothing -- runtime configuration; install at call site
    }

replayReactionReactionVersion :: Natural
replayReactionReactionVersion = 1

replayReactionReactionFingerprint :: Text
replayReactionReactionFingerprint = "cc73d755be55b8a2d237ac02752ad8d425a50c5fb9f7c3bab8b5f5ada239b1c8"

replayReactionCorrelate :: ReplayReactionInput -> Text
replayReactionCorrelate input = case input of
  ReplayRequested { retainedId } -> (N.retainedIdText retainedId)

replayReactionReact :: ReplayReactionInput -> Reaction.ReactionPlan Saga.ReplayLedgerCommand Target.ReplayTargetCommand
replayReactionReact input = case input of
  ReplayRequested { retainedId, envelope }
    -> Reaction.AdvanceReaction { command = Saga.Record (Saga.RecordData { Saga.retainedId = retainedId, Saga.envelope = envelope }), followUps = [Reaction.FollowDispatch (PMCommand (Stream.entityStream replayTargetCommandCategory (N.retainedIdText retainedId)) (Target.Store (Target.StoreData { Target.retainedId = retainedId, Target.envelope = envelope })))], onAccepted = [] }

replayReactionProcessManager =
  Reaction.ReactiveProcessManager
    { name = replayReactionProcessName
    , correlate = replayReactionCorrelate
    , sagaHandler = DomainCommandHandler { eventStream = replayLedgerEventStream, classifySilent = \_ -> SilentNoOp () }
    , streamFor = Stream.entityStream replayReactionCategory
    , targetEventStream = replayTargetEventStream
    , targetProjections = const []
    , react = replayReactionReact
    }

replayReactionRunProcessWorker options adapter =
  Reaction.runReactiveProcessManagerWorkerWith
    replayReactionProcessWorkerOptions
    options
    replayReactionProcessManager
    adapter
    (\event -> case decodeReplayReactionInput event of Nothing -> Nothing; Just input -> Just (event, input))