packages feed

keiro-dsl-0.15.0.0: test/conformance-dispatch-full/Generated/HospitalCapacity/AcceptedTransferNeeds/ReadModel.hs

-- @generated by keiro-dsl 0.15.0.0 (language keiro-dsl 4) from readmodel accepted_transfer_needs; do not edit.
module Generated.HospitalCapacity.AcceptedTransferNeeds.ReadModel
  ( acceptedTransferNeedsReadModel
  , acceptedTransferNeedsQualifiedTable
  , registerAcceptedTransferNeeds
  , startAcceptedTransferNeedsRebuild
  , finishAcceptedTransferNeedsRebuild
  , abandonAcceptedTransferNeedsRebuild
  , acceptedTransferNeedsAsyncProjection
  ) where

import Data.Functor (void)
import Effectful (Eff, (:>))
import Generated.HospitalCapacity.AcceptedTransferNeeds.ReadModelTable (acceptedTransferNeedsQualifiedTable)
import HospitalCapacity.AcceptedTransferNeeds.ReadModelHoles (AcceptedTransferNeedsQueryInput, AcceptedTransferNeedsQueryResult, acceptedTransferNeedsQuery, applyAcceptedTransferNeeds)
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 (..))

acceptedTransferNeedsReadModel :: ReadModel AcceptedTransferNeedsQueryInput AcceptedTransferNeedsQueryResult
acceptedTransferNeedsReadModel =
  ReadModel
    { name = "hospital-capacity-accepted-transfer-needs"
    , tableName = "accepted_transfer_needs"
    , schema = "hospital_capacity"
    , subscriptionName = "hospital-capacity-accepted-transfer-needs-sub"
    , version = 1
    , shapeHash = "fnv1a:fec517dae7760b8a"
    , defaultConsistency = Eventual
    , strongScope = EntireLog
    , query = acceptedTransferNeedsQuery
    }

-- Call once at projection startup before serving queries.
registerAcceptedTransferNeeds :: (Store :> es) => Eff es ()
registerAcceptedTransferNeeds =
  void (registerReadModel "hospital-capacity-accepted-transfer-needs" 1 "fnv1a:fec517dae7760b8a")

startAcceptedTransferNeedsRebuild :: (Store :> es) => GlobalPosition -> Eff es ReadModelMetadata
startAcceptedTransferNeedsRebuild =
  Rebuild.startRebuild acceptedTransferNeedsReadModel ["hospital-capacity-accepted-transfer-needs-async"]

finishAcceptedTransferNeedsRebuild :: (Store :> es) => GlobalPosition -> Eff es (Either Rebuild.RebuildError ReadModelMetadata)
finishAcceptedTransferNeedsRebuild =
  Rebuild.finishRebuild acceptedTransferNeedsReadModel ["hospital-capacity-accepted-transfer-needs-async"]

abandonAcceptedTransferNeedsRebuild :: (Store :> es) => Eff es ReadModelMetadata
abandonAcceptedTransferNeedsRebuild = Rebuild.abandonRebuild acceptedTransferNeedsReadModel

acceptedTransferNeedsAsyncProjection :: AsyncProjection
acceptedTransferNeedsAsyncProjection =
  AsyncProjection
    { name = "hospital-capacity-accepted-transfer-needs-async"
    , readModelName = "hospital-capacity-accepted-transfer-needs"
    , subscriptionName = "hospital-capacity-accepted-transfer-needs-sub"
    , applyRecorded = applyAcceptedTransferNeeds
    , idempotencyKey = \recorded -> recorded.eventId
    }