Use cases
Processor/retriever pattern: IProductsProcessor / IProductsRetriever (DefaultProductsProcessor / DefaultProductsRetriever), with FluentValidation *Validator types.
Product commands (write)
| Input |
Operation |
CreateProductInput |
Create product in Draft |
UpdateProductInput |
Partial update + status transitions |
RetireProductInput |
Retire product |
AddEditionInput |
Add edition to product |
UpdateEditionInput |
Update edition |
ActivateFeatureInput |
Activate/create edition-feature binding |
DeactivateFeatureInput |
Remove edition-feature binding |
Product queries (read)
| Input |
Operation |
GetProductByIdInput |
Get product |
ListProductsInput |
List products |
GetEditionByIdInput |
Get edition |
Peer catalog reads (seed/read-only)
| Retriever |
Inputs |
IFeatureCatalogRetriever |
ListCatalogFeaturesInput, GetCatalogFeatureByIdInput |
IBusinessModelCatalogRetriever |
ListCatalogBusinessModelsInput |
IPricingModelCatalogRetriever |
ListCatalogPricingModelsInput |
Invariants
Status transitions are validated (e.g. ProductActivationRequiresPublishedEditionException, InvalidProductStatusTransitionException, InvalidEditionStatusTransitionException); slugs are unique per tenant and immutable (DuplicateProductSlugException, ProductSlugImmutableException); edition codes unique per product (EditionCodeConflictException).
See also