Product
A product of the catalog: a draft until it is published on the storefront, which takes a brand and a category; it can be delisted and published again. Its name, description, brand, category and price change at any time.
Every shopper of the tenant reads the products, and an employee changes them: a product belongs to its tenant (Ownership.TENANT), so neither its reads nor its writes are restricted by an owner. The catalog server's action-level authorization lets only an employee send its commands.
Types
The codes the aggregate rejects a command with, by their local names: the compiler and the kernel name them <context>.product.<code>, as its peers read them from the api's generated contract.
Functions
Discontinues the product for good: its own event, with the reason, and the lifecycle event, in one commit, so the product is deleted as DeleteAggregate deletes it and the reason stays in its history.