Development¶
Adding a product/edition operation¶
- Add an input +
*Validatorin.DomainModel/.DomainModel.Impl. - Add the method to
IProductsProcessor/DefaultProductsProcessor, mutate theProductaggregate (editions are owned - cascade viaProductEntityMap), and publish the matchingcatalog.domain.v1.*event. - Expose over both adapters (ServiceModel contract -> REST controller +
Grpc*adapter). - Add unit + acceptance tests.
Working with peer catalogs¶
Feature, PricingModel, and BusinessModel are separate aggregates/repos (not owned by Product). Add new peer catalog reads via their retrievers (IFeatureCatalogRetriever, etc.) and seed data through MicroserviceMigration.
Keep it publish-only¶
Per ADR-0003, this context publishes but does not consume. Do not add IConsumer/sagas here - downstream reconciliation belongs in Entitlements/Billing/Metering.
One aggregate root¶
IProduct is the only aggregate root (ADR-0001) - the architecture test enforces it. Editions live inside the Product aggregate (ADR-0002).
Base template¶
Enabled stacks are controlled by the minimal-host matrix props. See template layering and reuse.