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