packages feed

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

{-# LANGUAGE OverloadedRecordDot #-}
{-# LANGUAGE OverloadedStrings #-}

-- @generated by keiro-dsl; do not edit. Regenerated from the .keiro spec.
module SkelQueue.Generated.MyService.Transfer_decisions.ReadModel (
    transferDecisionsReadModel,
    transferDecisionsQualifiedTable,
    registerTransferDecisions,
    startTransferDecisionsRebuild,
    finishTransferDecisionsRebuild,
    abandonTransferDecisionsRebuild,
    transferDecisionsAsyncProjection,
) where

import Data.Functor (void)
import Effectful (Eff, (:>))
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 (..))
import SkelQueue.Generated.MyService.Transfer_decisions.ReadModelTable (transferDecisionsQualifiedTable)
import SkelQueue.MyService.Transfer_decisions.ReadModelHoles (TransferDecisionsQueryInput, TransferDecisionsQueryResult, applyTransferDecisions, transferDecisionsQuery)

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
        }