packages feed

keiro-dsl-0.10.0.0: test/conformance-readmodel-runtime/Generated/HospitalCapacity/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 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, 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 = "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
    }