Validate, normalize, and persist a product with a new stable UUID identity.
The shared product policy runs before UUID assignment and repository access, so an invalid product can never be persisted even when a non-HTTP caller uses this application service.
Remove one product from the current catalog while leaving its UUID boundary explicit.
List the catalog without inventing placeholder products for an empty result.
Replace an existing product's editable fields without changing its stable identity.
The shared policy runs before repository access. A missing product is represented by null;
callers can translate that application result into their own not-found contract.
Application use cases for the persisted product catalog.