packages feed

keiro-dsl-0.10.0.0: test/conformance-skeletons/SkelQueue/Generated/MyService/Transfer_decisions/ReadModel.hs

{-# LANGUAGE OverloadedRecordDot #-}
-- @generated by keiro-dsl 0.9.0.0 (language keiro-dsl 4) from readmodel transfer_decisions; do not edit.
module SkelQueue.Generated.MyService.Transfer_decisions.ReadModel
  ( transferDecisionsReadModel
  , transferDecisionsQualifiedTable
  , registerTransferDecisions
  , startTransferDecisionsRebuild
  , finishTransferDecisionsRebuild
  , abandonTransferDecisionsRebuild
  , transferDecisionsAsyncProjection
  ) where

import Data.Functor (void)
import Effectful (Eff, (:>))
import SkelQueue.Generated.MyService.Transfer_decisions.ReadModelTable (transferDecisionsQualifiedTable)
import SkelQueue.MyService.Transfer_decisions.ReadModelHoles (TransferDecisionsQueryInput, TransferDecisionsQueryResult, transferDecisionsQuery, applyTransferDecisions)
import Keiro.Projection (AsyncProjection (..))
import Keiro.ReadModel (ConsistencyMode (..), ReadModel (..), ReadModelMetadata, StrongScope (..), registerReadModel)
import Keiro.ReadModel.Rebuild qualified as Rebuild
import Kiroku.Store.Effect (Store)
import Kiroku.Store.Types (GlobalPosition, RecordedEvent (..))

transferDecisionsReadModel :: ReadModel TransferDecisionsQueryInput TransferDecisionsQueryResult
transferDecisionsReadModel =
  ReadModel
    { name = "my-service-transfer-decisions"
    , tableName = "transfer_decisions"
    , schema = "my_service"
    , subscriptionName = "my-service-transfer-decisions-sub"
    , version = 1
    , shapeHash = "fnv1a:d44d218822582783"
    , defaultConsistency = Eventual
    , strongScope = EntireLog
    , query = transferDecisionsQuery
    }

-- Call once at projection startup before serving queries.
registerTransferDecisions :: (Store :> es) => Eff es ()
registerTransferDecisions =
  void (registerReadModel "my-service-transfer-decisions" 1 "fnv1a:d44d218822582783")

startTransferDecisionsRebuild :: (Store :> es) => GlobalPosition -> Eff es ReadModelMetadata
startTransferDecisionsRebuild =
  Rebuild.startRebuild transferDecisionsReadModel ["my-service-transfer-decisions-async"]

finishTransferDecisionsRebuild :: (Store :> es) => GlobalPosition -> Eff es (Either Rebuild.RebuildError ReadModelMetadata)
finishTransferDecisionsRebuild =
  Rebuild.finishRebuild transferDecisionsReadModel ["my-service-transfer-decisions-async"]

abandonTransferDecisionsRebuild :: (Store :> es) => Eff es ReadModelMetadata
abandonTransferDecisionsRebuild = Rebuild.abandonRebuild transferDecisionsReadModel

transferDecisionsAsyncProjection :: AsyncProjection
transferDecisionsAsyncProjection =
  AsyncProjection
    { name = "my-service-transfer-decisions-async"
    , readModelName = "my-service-transfer-decisions"
    , subscriptionName = "my-service-transfer-decisions-sub"
    , applyRecorded = applyTransferDecisions
    , idempotencyKey = \recorded -> recorded.eventId
    }