keiro-dsl-0.2.0.0: test/conformance-readmodel-runtime/Generated/HospitalCapacity/Transfer_decisions/ReadModel.hs
{-# LANGUAGE OverloadedRecordDot #-}
{-# LANGUAGE OverloadedStrings #-}
-- @generated by keiro-dsl; do not edit. Regenerated from the .keiro spec.
module Generated.HospitalCapacity.Transfer_decisions.ReadModel (
transferDecisionsReadModel,
transferDecisionsQualifiedTable,
registerTransferDecisions,
startTransferDecisionsRebuild,
finishTransferDecisionsRebuild,
abandonTransferDecisionsRebuild,
transferDecisionsAsyncProjection,
) where
import Data.Functor (void)
import Effectful (Eff, (:>))
import Generated.HospitalCapacity.Transfer_decisions.ReadModelTable (transferDecisionsQualifiedTable)
import HospitalCapacity.Transfer_decisions.ReadModelHoles (TransferDecisionsQueryInput, TransferDecisionsQueryResult, applyTransferDecisions, transferDecisionsQuery)
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 = "hospital-capacity-transfer-decisions"
, tableName = "transfer_decisions"
, schema = "hospital_capacity"
, subscriptionName = "hospital-capacity-transfer-decisions-sub"
, version = 1
, shapeHash = "fnv1a:3717f6d9e3c44bd6"
, defaultConsistency = Strong
, strongScope = CategoryHead "reservation"
, query = transferDecisionsQuery
}
-- Call once at projection startup before serving queries.
registerTransferDecisions :: (Store :> es) => Eff es ()
registerTransferDecisions =
void (registerReadModel "hospital-capacity-transfer-decisions" 1 "fnv1a:3717f6d9e3c44bd6")
startTransferDecisionsRebuild :: (Store :> es) => GlobalPosition -> Eff es ReadModelMetadata
startTransferDecisionsRebuild =
Rebuild.startRebuild transferDecisionsReadModel ["hospital-capacity-transfer-decisions-async"]
finishTransferDecisionsRebuild :: (Store :> es) => GlobalPosition -> Eff es (Either Rebuild.RebuildError ReadModelMetadata)
finishTransferDecisionsRebuild =
Rebuild.finishRebuild transferDecisionsReadModel ["hospital-capacity-transfer-decisions-async"]
abandonTransferDecisionsRebuild :: (Store :> es) => Eff es ReadModelMetadata
abandonTransferDecisionsRebuild = Rebuild.abandonRebuild transferDecisionsReadModel
transferDecisionsAsyncProjection :: AsyncProjection
transferDecisionsAsyncProjection =
AsyncProjection
{ name = "hospital-capacity-transfer-decisions-async"
, readModelName = "hospital-capacity-transfer-decisions"
, subscriptionName = "hospital-capacity-transfer-decisions-sub"
, applyRecorded = applyTransferDecisions
, idempotencyKey = \recorded -> recorded.eventId
}