packages feed

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
        }