packages feed

keiro-dsl-0.12.0.0: test/conformance-projection-catalog/Generated/CatalogDemo/ProjectionCatalog.hs

-- @generated by keiro-dsl 0.12.0.0 (language keiro-dsl 5) from projection-catalog catalog-demo; do not edit.
{-# LANGUAGE OverloadedStrings #-}
module Generated.CatalogDemo.ProjectionCatalog
  ( projectionCatalog
  , validatedProjectionCatalog
  , projectionCatalogInventory
  , projectionCatalogRegistrations
  , projectionCatalogAsyncRegistrations
  , projectionCatalogQuerySupplies
  , registerProjectionCatalog
  , orderSummaryWriterProjectionSet
  , shipmentWriterProjectionSet
  , auditWriterProjectionSet
  , orderSummaryWriterInlineProjections
  , shipmentWriterInlineProjections
  , ordersInlineProjections
  , shipmentsInlineProjections
  , reportingRebuildGroupId
  , startReportingRebuild
  , shippingRebuildGroupId
  , startShippingRebuild
  ) where

import Data.List.NonEmpty (NonEmpty (..))
import Effectful (Eff, IOE, (:>))
import Data.Map.Strict qualified as Map
import Generated.CatalogDemo.Orders.Codec qualified as OrdersCodec
import Generated.CatalogDemo.Orders.Domain qualified as OrdersDomain
import Generated.CatalogDemo.Shipments.Domain qualified as ShipmentsDomain
import Keiro.Projection (AsyncProjection (..), InlineProjection (..))
import Keiro.Projection.Catalog qualified as Catalog
import Keiro.ReadModel.Rebuild qualified as Rebuild
import Kiroku.Store.Effect (Store)
import Kiroku.Store.Types qualified as Kiroku
import Kiroku.Store.Subscription.Types qualified as KirokuSubscription
import CatalogDemo.ProjectionCatalog.ProjectionCatalogHoles qualified as Holes
import Generated.CatalogDemo.OrderInline.ReadModel qualified as RMOrderInline
import Generated.CatalogDemo.OrderTotalsLookup.ReadModel qualified as RMOrderTotalsLookup
import Generated.CatalogDemo.ShipmentLookup.ReadModel qualified as RMShipmentLookup
import Generated.CatalogDemo.CatalogAudit.ReadModel qualified as RMCatalogAudit

must :: Show error => Either error value -> value
must = either (error . show) id

orderSummaryWriterProjectionSet :: Catalog.ProjectionSet OrdersDomain.OrdersEvent
orderSummaryWriterProjectionSet =
  Catalog.ProjectionSet
    (must (Catalog.mkSourceId "aggregate:Orders"))
    (Catalog.ProjectionDefinition
      (must (Catalog.mkProjectionId "order_summary_writer"))
      (must (Catalog.mkRebuildGroupId "reporting"))
      ((must (Catalog.mkTargetId "order_summary")) :| [(must (Catalog.mkTargetId "order_totals"))])
      (Catalog.Replayable (Catalog.replayAdapterFromCodec OrdersCodec.ordersCodec Holes.applyOrderSummaryWriterReplay))
      (Catalog.InlineHandler (InlineProjection "order_summary_writer" Holes.applyOrderSummaryWriterLive) (must (Catalog.mkClaimSite "projection-owner order_summary_writer inline-handler")) :| [])
      (must (Catalog.mkClaimSite "projection-owner order_summary_writer"))
      :| [])
    (must (Catalog.mkClaimSite "projection-owner order_summary_writer source"))

orderSummaryWriterInlineProjections :: [InlineProjection OrdersDomain.OrdersEvent]
orderSummaryWriterInlineProjections = Catalog.typedInlineProjections validatedProjectionCatalog orderSummaryWriterProjectionSet

shipmentWriterProjectionSet :: Catalog.ProjectionSet ShipmentsDomain.ShipmentsEvent
shipmentWriterProjectionSet =
  Catalog.ProjectionSet
    (must (Catalog.mkSourceId "aggregate:Shipments"))
    (Catalog.ProjectionDefinition
      (must (Catalog.mkProjectionId "shipment_writer"))
      (must (Catalog.mkRebuildGroupId "shipping"))
      ((must (Catalog.mkTargetId "shipment_summary")) :| [])
      (Catalog.LiveOnly (Catalog.LiveOnlyReason "carrier events cannot be replayed"))
      (Catalog.InlineHandler (InlineProjection "shipment_writer" Holes.applyShipmentWriterLive) (must (Catalog.mkClaimSite "projection-owner shipment_writer inline-handler")) :| [])
      (must (Catalog.mkClaimSite "projection-owner shipment_writer"))
      :| [])
    (must (Catalog.mkClaimSite "projection-owner shipment_writer source"))

shipmentWriterInlineProjections :: [InlineProjection ShipmentsDomain.ShipmentsEvent]
shipmentWriterInlineProjections = Catalog.typedInlineProjections validatedProjectionCatalog shipmentWriterProjectionSet

auditWriterProjectionSet :: Catalog.ProjectionSet Holes.AuditWriterEvent
auditWriterProjectionSet =
  Catalog.ProjectionSet
    (must (Catalog.mkSourceId "category:audit"))
    (Catalog.ProjectionDefinition
      (must (Catalog.mkProjectionId "audit_writer"))
      (must (Catalog.mkRebuildGroupId "reporting"))
      ((must (Catalog.mkTargetId "audit_log")) :| [])
      (Catalog.Replayable (Catalog.ReplayAdapter Holes.decodeAuditWriterReplay Holes.applyAuditWriterReplay))
      (Catalog.AsyncHandler (AsyncProjection "catalog-demo-audit-v1" "catalog-demo-catalogAudit" "catalog-demo-audit" Holes.applyAuditWriterLive Holes.auditWriterIdempotencyKey) (must (Catalog.mkSubscriptionId "catalog-demo-audit")) (must (Catalog.mkDedupKeyId "catalog-demo-audit-v1")) (must (Catalog.mkClaimSite "projection-owner audit_writer async-handler")) :| [])
      (must (Catalog.mkClaimSite "projection-owner audit_writer"))
      :| [])
    (must (Catalog.mkClaimSite "projection-owner audit_writer source"))

ordersInlineProjections :: [InlineProjection OrdersDomain.OrdersEvent]
ordersInlineProjections = concat [orderSummaryWriterInlineProjections]

shipmentsInlineProjections :: [InlineProjection ShipmentsDomain.ShipmentsEvent]
shipmentsInlineProjections = concat [shipmentWriterInlineProjections]

projectionCatalog :: Catalog.ProjectionCatalog
projectionCatalog =
  Catalog.ProjectionCatalog
    [Catalog.SourceDeclaration (must (Catalog.mkSourceId "aggregate:Orders")) (Catalog.CategorySource (Kiroku.CategoryName "orders")) "aggregate:Orders/generated-codec/v1/mapped-132056a8f2ee095d" (must (Catalog.mkClaimSite "source aggregate:Orders")), Catalog.SourceDeclaration (must (Catalog.mkSourceId "aggregate:Shipments")) (Catalog.CategorySource (Kiroku.CategoryName "shipments")) "aggregate:Shipments/generated-codec/v1/mapped-9456a95e380c74b5" (must (Catalog.mkClaimSite "source aggregate:Shipments")), Catalog.SourceDeclaration (must (Catalog.mkSourceId "category:audit")) (Catalog.CategorySource (Kiroku.CategoryName "audit")) "category:audit/application-decoder/v1" (must (Catalog.mkClaimSite "source category:audit"))]
    [Catalog.TargetDeclaration (must (Catalog.mkTargetId "order_summary")) (Catalog.QualifiedTable "sales" "order_summary") Catalog.ClearBeforeReplay [] (must (Catalog.mkClaimSite "target order_summary")), Catalog.TargetDeclaration (must (Catalog.mkTargetId "audit_log")) (Catalog.QualifiedTable "sales" "audit_log") Catalog.PreserveAndReconcile [] (must (Catalog.mkClaimSite "target audit_log")), Catalog.TargetDeclaration (must (Catalog.mkTargetId "order_totals")) (Catalog.QualifiedTable "sales" "order_totals") Catalog.ClearBeforeReplay [(must (Catalog.mkTargetId "order_summary"))] (must (Catalog.mkClaimSite "target order_totals")), Catalog.TargetDeclaration (must (Catalog.mkTargetId "shipment_summary")) (Catalog.QualifiedTable "sales" "shipment_summary") Catalog.PreserveAndReconcile [] (must (Catalog.mkClaimSite "target shipment_summary"))]
    [Catalog.RebuildGroupDeclaration (must (Catalog.mkRebuildGroupId "reporting")) [(must (Catalog.mkTargetId "order_summary")), (must (Catalog.mkTargetId "order_totals")), (must (Catalog.mkTargetId "audit_log"))] [] (must (Catalog.mkClaimSite "rebuild-group reporting")), Catalog.RebuildGroupDeclaration (must (Catalog.mkRebuildGroupId "shipping")) [(must (Catalog.mkTargetId "shipment_summary"))] [] (must (Catalog.mkClaimSite "rebuild-group shipping"))]
    [Catalog.ProjectionRevision (must (Catalog.mkProjectionRevisionId "reporting_v1")) (must (Catalog.mkRebuildGroupId "reporting")) (Map.fromList [((must (Catalog.mkTargetId "order_summary")), Catalog.TargetProvisioner "reporting-v1-order-summary" 1 (Catalog.TargetSchemaVersion "v1") "order-summary-v1" Holes.provisionReportingV1OrderSummary "reporting-v1-order-summary-validator" 1 (Just Holes.validateReportingV1OrderSummary) [Catalog.PromotionObjectName Catalog.PromotionIndex "order_summary_status_idx__v1" "order_summary_status_idx"]), ((must (Catalog.mkTargetId "order_totals")), Catalog.TargetProvisioner "reporting-v1-order-totals" 1 (Catalog.TargetSchemaVersion "v1") "order-totals-v1" Holes.provisionReportingV1OrderTotals "reporting-v1-order-totals-validator" 1 (Just Holes.validateReportingV1OrderTotals) [Catalog.PromotionObjectName Catalog.PromotionConstraint "order_totals_pkey__v1" "order_totals_pkey"]), ((must (Catalog.mkTargetId "audit_log")), Catalog.TargetProvisioner "reporting-v1-audit-log" 1 (Catalog.TargetSchemaVersion "v1") "audit-log-v1" Holes.provisionReportingV1AuditLog "reporting-v1-audit-log-validator" 1 (Just Holes.validateReportingV1AuditLog) [Catalog.PromotionObjectName Catalog.PromotionOwnedSequence "audit_log_id_seq__v1" "audit_log_id_seq"])]) [Catalog.RevisionLiveHandler "reporting_v1/order_summary_writer/live" 1 (Catalog.RevisionInlineDelivery (must (Catalog.mkProjectionId "order_summary_writer")) "order_summary_writer") [(must (Catalog.mkTargetId "order_summary")), (must (Catalog.mkTargetId "order_totals"))] Holes.applyReportingV1OrderSummaryWriterLive, Catalog.RevisionLiveHandler "reporting_v1/audit_writer/live" 1 (Catalog.RevisionSubscriptionDelivery (must (Catalog.mkProjectionId "audit_writer")) (must (Catalog.mkSubscriptionId "catalog-demo-audit")) (must (Catalog.mkDedupKeyId "catalog-demo-audit-v1"))) [(must (Catalog.mkTargetId "audit_log"))] Holes.applyReportingV1AuditWriterLive] [Catalog.RevisionReplayAdapter "reporting_v1/replay" 1 [(must (Catalog.mkTargetId "order_summary")), (must (Catalog.mkTargetId "order_totals")), (must (Catalog.mkTargetId "audit_log"))] Holes.applyReportingV1Replay] [Catalog.RevisionVerification "reporting_v1/verification" 1 [(must (Catalog.mkTargetId "order_summary")), (must (Catalog.mkTargetId "order_totals")), (must (Catalog.mkTargetId "audit_log"))] Holes.verifyReportingV1] [] (must (Catalog.mkClaimSite "projection-revision reporting_v1")), Catalog.ProjectionRevision (must (Catalog.mkProjectionRevisionId "reporting_v2")) (must (Catalog.mkRebuildGroupId "reporting")) (Map.fromList [((must (Catalog.mkTargetId "order_summary")), Catalog.TargetProvisioner "reporting-v2-order-summary" 1 (Catalog.TargetSchemaVersion "v2") "order-summary-v2" Holes.provisionReportingV2OrderSummary "reporting-v2-order-summary-validator" 1 (Just Holes.validateReportingV2OrderSummary) [Catalog.PromotionObjectName Catalog.PromotionIndex "order_summary_status_idx__v2" "order_summary_status_idx"]), ((must (Catalog.mkTargetId "order_totals")), Catalog.TargetProvisioner "reporting-v2-order-totals" 1 (Catalog.TargetSchemaVersion "v2") "order-totals-v2" Holes.provisionReportingV2OrderTotals "reporting-v2-order-totals-validator" 1 (Just Holes.validateReportingV2OrderTotals) [Catalog.PromotionObjectName Catalog.PromotionConstraint "order_totals_pkey__v2" "order_totals_pkey"]), ((must (Catalog.mkTargetId "audit_log")), Catalog.TargetProvisioner "reporting-v2-audit-log" 1 (Catalog.TargetSchemaVersion "v2") "audit-log-v2" Holes.provisionReportingV2AuditLog "reporting-v2-audit-log-validator" 1 (Just Holes.validateReportingV2AuditLog) [Catalog.PromotionObjectName Catalog.PromotionOwnedSequence "audit_log_id_seq__v2" "audit_log_id_seq"])]) [Catalog.RevisionLiveHandler "reporting_v2/order_summary_writer/live" 1 (Catalog.RevisionInlineDelivery (must (Catalog.mkProjectionId "order_summary_writer")) "order_summary_writer") [(must (Catalog.mkTargetId "order_summary")), (must (Catalog.mkTargetId "order_totals"))] Holes.applyReportingV2OrderSummaryWriterLive, Catalog.RevisionLiveHandler "reporting_v2/audit_writer/live" 1 (Catalog.RevisionSubscriptionDelivery (must (Catalog.mkProjectionId "audit_writer")) (must (Catalog.mkSubscriptionId "catalog-demo-audit")) (must (Catalog.mkDedupKeyId "catalog-demo-audit-v1"))) [(must (Catalog.mkTargetId "audit_log"))] Holes.applyReportingV2AuditWriterLive] [Catalog.RevisionReplayAdapter "reporting_v2/replay" 1 [(must (Catalog.mkTargetId "order_summary")), (must (Catalog.mkTargetId "order_totals")), (must (Catalog.mkTargetId "audit_log"))] Holes.applyReportingV2Replay] [Catalog.RevisionVerification "reporting_v2/verification" 1 [(must (Catalog.mkTargetId "order_summary")), (must (Catalog.mkTargetId "order_totals")), (must (Catalog.mkTargetId "audit_log"))] Holes.verifyReportingV2] [] (must (Catalog.mkClaimSite "projection-revision reporting_v2"))]
    [Catalog.AllRowsExternalRead (must (Catalog.mkExternalReadContractId "order_totals_reader")) (Catalog.ExternalReadContractVersion 1) (must (Catalog.mkQueryModelId "order_totals_lookup")) (Catalog.QualifiedSqlType "app_contract" "order_totals_row_v1") "fnv1a:768a23d719dcb4d4" ((must (Catalog.mkProjectionRevisionId "reporting_v1")) :| [(must (Catalog.mkProjectionRevisionId "reporting_v2"))]) 1 (must (Catalog.mkClaimSite "external-read order_totals_reader v1"))]
    [Catalog.SubscriptionDeclaration (must (Catalog.mkSubscriptionId "catalog-demo-audit")) "catalog-demo-audit" (must (Catalog.mkSourceId "category:audit")) KirokuSubscription.FromCurrentHead (must (Catalog.mkClaimSite "projection-owner audit_writer subscription"))]
    [Catalog.DedupKeyDeclaration (must (Catalog.mkDedupKeyId "catalog-demo-audit-v1")) "catalog-demo-audit-v1" (must (Catalog.mkClaimSite "projection-owner audit_writer dedup"))]
    [Catalog.SomeQueryModelBinding (Catalog.QueryModelBinding (must (Catalog.mkQueryModelId "catalogAudit")) RMCatalogAudit.catalogAuditReadModel (must (Catalog.mkRebuildGroupId "reporting")) [(must (Catalog.mkTargetId "audit_log"))] (must (Catalog.mkClaimSite "readmodel catalogAudit"))), Catalog.SomeQueryModelBinding (Catalog.QueryModelBinding (must (Catalog.mkQueryModelId "order_inline")) RMOrderInline.orderInlineReadModel (must (Catalog.mkRebuildGroupId "reporting")) [(must (Catalog.mkTargetId "order_summary"))] (must (Catalog.mkClaimSite "readmodel order_inline"))), Catalog.SomeQueryModelBinding (Catalog.QueryModelBinding (must (Catalog.mkQueryModelId "order_totals_lookup")) RMOrderTotalsLookup.orderTotalsLookupReadModel (must (Catalog.mkRebuildGroupId "reporting")) [(must (Catalog.mkTargetId "order_totals"))] (must (Catalog.mkClaimSite "readmodel order_totals_lookup"))), Catalog.SomeQueryModelBinding (Catalog.QueryModelBinding (must (Catalog.mkQueryModelId "shipmentLookup")) RMShipmentLookup.shipmentLookupReadModel (must (Catalog.mkRebuildGroupId "shipping")) [(must (Catalog.mkTargetId "shipment_summary"))] (must (Catalog.mkClaimSite "readmodel shipmentLookup")))]
    [Catalog.SomeProjectionSet orderSummaryWriterProjectionSet, Catalog.SomeProjectionSet shipmentWriterProjectionSet, Catalog.SomeProjectionSet auditWriterProjectionSet]

validatedProjectionCatalog :: Catalog.ValidatedProjectionCatalog
validatedProjectionCatalog = case Catalog.validateProjectionCatalog projectionCatalog of
  Catalog.Success catalog -> catalog
  Catalog.Failure diagnostics -> error ("keiro-dsl generated an invalid projection catalog: " <> show diagnostics)

projectionCatalogInventory :: Catalog.CatalogInventory
projectionCatalogInventory = Catalog.catalogInventory validatedProjectionCatalog

projectionCatalogRegistrations :: [Catalog.CatalogRegistration]
projectionCatalogRegistrations = Catalog.catalogRegistrations validatedProjectionCatalog

projectionCatalogAsyncRegistrations :: [Catalog.AsyncProjectionRegistration]
projectionCatalogAsyncRegistrations = Catalog.asyncProjectionRegistrations validatedProjectionCatalog

projectionCatalogQuerySupplies :: [Catalog.ResolvedQuerySupply]
projectionCatalogQuerySupplies = Catalog.resolvedQuerySupplies validatedProjectionCatalog

registerProjectionCatalog :: (Store :> es) => Eff es (Either Rebuild.CatalogRegistrationError [Rebuild.GroupRebuildMetadata])
registerProjectionCatalog = Rebuild.registerProjectionCatalog validatedProjectionCatalog

reportingRebuildGroupId :: Catalog.RebuildGroupId
reportingRebuildGroupId = (must (Catalog.mkRebuildGroupId "reporting"))

startReportingRebuild :: (IOE :> es, Store :> es) => Rebuild.RebuildOptions -> Eff es (Either Rebuild.CatalogRebuildError Rebuild.RebuildRunReport)
startReportingRebuild = Rebuild.startCatalogRebuild validatedProjectionCatalog reportingRebuildGroupId

shippingRebuildGroupId :: Catalog.RebuildGroupId
shippingRebuildGroupId = (must (Catalog.mkRebuildGroupId "shipping"))

startShippingRebuild :: (IOE :> es, Store :> es) => Rebuild.RebuildOptions -> Eff es (Either Rebuild.CatalogRebuildError Rebuild.RebuildRunReport)
startShippingRebuild = Rebuild.startCatalogRebuild validatedProjectionCatalog shippingRebuildGroupId