packages feed

keiro-dsl-0.15.0.0: test/conformance-router/Generated/IncidentPaging/ServiceOncall/ReadModel.hs

-- @generated by keiro-dsl 0.15.0.0 (language keiro-dsl 4) from readmodel service_oncall; do not edit.
module Generated.IncidentPaging.ServiceOncall.ReadModel
  ( serviceOncallReadModel
  , serviceOncallQualifiedTable
  , registerServiceOncall
  , startServiceOncallRebuild
  , finishServiceOncallRebuild
  , abandonServiceOncallRebuild
  , serviceOncallAsyncProjection
  ) where

import Data.Functor (void)
import Effectful (Eff, (:>))
import Generated.IncidentPaging.ServiceOncall.ReadModelTable (serviceOncallQualifiedTable)
import IncidentPaging.ServiceOncall.ReadModelHoles (ServiceOncallQueryInput, ServiceOncallQueryResult, serviceOncallQuery, applyServiceOncall)
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 (..))

serviceOncallReadModel :: ReadModel ServiceOncallQueryInput ServiceOncallQueryResult
serviceOncallReadModel =
  ReadModel
    { name = "incident-paging-service-oncall"
    , tableName = "service_oncall"
    , schema = "incident_paging"
    , subscriptionName = "incident-paging-service-oncall-sub"
    , version = 1
    , shapeHash = "fnv1a:1d7aef5c25b434fd"
    , defaultConsistency = Eventual
    , strongScope = EntireLog
    , query = serviceOncallQuery
    }

-- Call once at projection startup before serving queries.
registerServiceOncall :: (Store :> es) => Eff es ()
registerServiceOncall =
  void (registerReadModel "incident-paging-service-oncall" 1 "fnv1a:1d7aef5c25b434fd")

startServiceOncallRebuild :: (Store :> es) => GlobalPosition -> Eff es ReadModelMetadata
startServiceOncallRebuild =
  Rebuild.startRebuild serviceOncallReadModel ["incident-paging-service-oncall-async"]

finishServiceOncallRebuild :: (Store :> es) => GlobalPosition -> Eff es (Either Rebuild.RebuildError ReadModelMetadata)
finishServiceOncallRebuild =
  Rebuild.finishRebuild serviceOncallReadModel ["incident-paging-service-oncall-async"]

abandonServiceOncallRebuild :: (Store :> es) => Eff es ReadModelMetadata
abandonServiceOncallRebuild = Rebuild.abandonRebuild serviceOncallReadModel

serviceOncallAsyncProjection :: AsyncProjection
serviceOncallAsyncProjection =
  AsyncProjection
    { name = "incident-paging-service-oncall-async"
    , readModelName = "incident-paging-service-oncall"
    , subscriptionName = "incident-paging-service-oncall-sub"
    , applyRecorded = applyServiceOncall
    , idempotencyKey = \recorded -> recorded.eventId
    }