Skip to content

Development

Adding a product/edition operation

  1. Add an input + *Validator in .DomainModel / .DomainModel.Impl.
  2. Add the method to IProductsProcessor / DefaultProductsProcessor, mutate the Product aggregate (editions are owned - cascade via ProductEntityMap), and publish the matching catalog.domain.v1.* event.
  3. Expose over both adapters (ServiceModel contract -> REST controller + Grpc* adapter).
  4. 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.

See also