packages feed

keiro-dsl-0.2.0.0: test/conformance-newsurface/Generated/TransferRouting/Hospital_load/ReadModel.hs

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

-- @generated by keiro-dsl; do not edit. Regenerated from the .keiro spec.
module Generated.TransferRouting.Hospital_load.ReadModel (
    hospitalLoadReadModel,
    hospitalLoadQualifiedTable,
    registerHospitalLoad,
    startHospitalLoadRebuild,
    finishHospitalLoadRebuild,
    abandonHospitalLoadRebuild,
    hospitalLoadAsyncProjection,
) where

import Data.Functor (void)
import Effectful (Eff, (:>))
import Generated.TransferRouting.Hospital_load.ReadModelTable (hospitalLoadQualifiedTable)
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 TransferRouting.Hospital_load.ReadModelHoles (HospitalLoadQueryInput, HospitalLoadQueryResult, applyHospitalLoad, hospitalLoadQuery)

hospitalLoadReadModel :: ReadModel HospitalLoadQueryInput HospitalLoadQueryResult
hospitalLoadReadModel =
    ReadModel
        { name = "transfer-routing-hospital-load"
        , tableName = "hospital_load"
        , schema = "hospital_transfer"
        , subscriptionName = "transfer-routing-hospital-load-sub"
        , version = 1
        , shapeHash = "fnv1a:977395d28f254ddb"
        , defaultConsistency = Eventual
        , strongScope = EntireLog
        , query = hospitalLoadQuery
        }

-- Call once at projection startup before serving queries.
registerHospitalLoad :: (Store :> es) => Eff es ()
registerHospitalLoad =
    void (registerReadModel "transfer-routing-hospital-load" 1 "fnv1a:977395d28f254ddb")

startHospitalLoadRebuild :: (Store :> es) => GlobalPosition -> Eff es ReadModelMetadata
startHospitalLoadRebuild =
    Rebuild.startRebuild hospitalLoadReadModel ["transfer-routing-hospital-load-async"]

finishHospitalLoadRebuild :: (Store :> es) => GlobalPosition -> Eff es (Either Rebuild.RebuildError ReadModelMetadata)
finishHospitalLoadRebuild =
    Rebuild.finishRebuild hospitalLoadReadModel ["transfer-routing-hospital-load-async"]

abandonHospitalLoadRebuild :: (Store :> es) => Eff es ReadModelMetadata
abandonHospitalLoadRebuild = Rebuild.abandonRebuild hospitalLoadReadModel

hospitalLoadAsyncProjection :: AsyncProjection
hospitalLoadAsyncProjection =
    AsyncProjection
        { name = "transfer-routing-hospital-load-async"
        , readModelName = "transfer-routing-hospital-load"
        , subscriptionName = "transfer-routing-hospital-load-sub"
        , applyRecorded = applyHospitalLoad
        , idempotencyKey = \recorded -> recorded.eventId
        }