packages feed

keiro-dsl-0.2.0.0: test/conformance-skeletons/SkelQueue/Generated/MyService/Accepted_transfer_needs/ReadModel.hs

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

-- @generated by keiro-dsl; do not edit. Regenerated from the .keiro spec.
module SkelQueue.Generated.MyService.Accepted_transfer_needs.ReadModel (
    acceptedTransferNeedsReadModel,
    acceptedTransferNeedsQualifiedTable,
    registerAcceptedTransferNeeds,
    startAcceptedTransferNeedsRebuild,
    finishAcceptedTransferNeedsRebuild,
    abandonAcceptedTransferNeedsRebuild,
    acceptedTransferNeedsAsyncProjection,
) where

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

acceptedTransferNeedsReadModel :: ReadModel AcceptedTransferNeedsQueryInput AcceptedTransferNeedsQueryResult
acceptedTransferNeedsReadModel =
    ReadModel
        { name = "my-service-accepted-transfer-needs"
        , tableName = "accepted_transfer_needs"
        , schema = "my_service"
        , subscriptionName = "my-service-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 "my-service-accepted-transfer-needs" 1 "fnv1a:fec517dae7760b8a")

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

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

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

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