packages feed

keiro-dsl-0.15.0.0: test/conformance-service-package/runtime/src/Proof/WorkspaceProof/BetaView/Generated/ReadModel.hs

-- @generated by keiro-dsl 0.15.0.0 (language keiro-dsl 4) from readmodel beta_view; do not edit.
module Proof.WorkspaceProof.BetaView.Generated.ReadModel
  ( betaViewReadModel
  , betaViewQualifiedTable
  , registerBetaView
  , startBetaViewRebuild
  , finishBetaViewRebuild
  , abandonBetaViewRebuild
  , betaViewAsyncProjection
  ) where

import Data.Functor (void)
import Effectful (Eff, (:>))
import Proof.WorkspaceProof.BetaView.Generated.ReadModelTable (betaViewQualifiedTable)
import Proof.WorkspaceProof.BetaView.ReadModelHoles (BetaViewQueryInput, BetaViewQueryResult, betaViewQuery, applyBetaView)
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 (..))

betaViewReadModel :: ReadModel BetaViewQueryInput BetaViewQueryResult
betaViewReadModel =
  ReadModel
    { name = "workspace-proof-beta-view"
    , tableName = "beta_view"
    , schema = "workspace_proof"
    , subscriptionName = "workspace-proof-beta-view-sub"
    , version = 1
    , shapeHash = "fnv1a:b20d797cf7a278b5"
    , defaultConsistency = Eventual
    , strongScope = EntireLog
    , query = betaViewQuery
    }

-- Call once at projection startup before serving queries.
registerBetaView :: (Store :> es) => Eff es ()
registerBetaView =
  void (registerReadModel "workspace-proof-beta-view" 1 "fnv1a:b20d797cf7a278b5")

startBetaViewRebuild :: (Store :> es) => GlobalPosition -> Eff es ReadModelMetadata
startBetaViewRebuild =
  Rebuild.startRebuild betaViewReadModel ["workspace-proof-beta-view-async"]

finishBetaViewRebuild :: (Store :> es) => GlobalPosition -> Eff es (Either Rebuild.RebuildError ReadModelMetadata)
finishBetaViewRebuild =
  Rebuild.finishRebuild betaViewReadModel ["workspace-proof-beta-view-async"]

abandonBetaViewRebuild :: (Store :> es) => Eff es ReadModelMetadata
abandonBetaViewRebuild = Rebuild.abandonRebuild betaViewReadModel

betaViewAsyncProjection :: AsyncProjection
betaViewAsyncProjection =
  AsyncProjection
    { name = "workspace-proof-beta-view-async"
    , readModelName = "workspace-proof-beta-view"
    , subscriptionName = "workspace-proof-beta-view-sub"
    , applyRecorded = applyBetaView
    , idempotencyKey = \recorded -> recorded.eventId
    }