Catalog Modul
Overview
The Catalog module is responsible for managing all product-related master data.
It defines how products are described, classified and enriched before they are used
by pricing, inventory and sales modules.
Catalog is a foundational module and is required for:
- product listings
- search and filtering
- pricing configuration
- inventory management
- SEO and merchandising
All operations are tenant-aware and scoped to the current tenant.
Services
The Catalog module consists of the following services:
- Brands - product brands and manufacturers
- Category - product categories and hierarchies
- Products - core product data
- Product Category - product category relations
- Product Colour - colour variants
- Product Size - size variants
- Product SEO - SEO metadata
- Product Property Value - dynamic product attributes
- Related Product - related and cross-sell products
- Property - attribute and property definitions
Models
This module exposes and consumes the following models.
- Brand Model
- Category Model
- Product Model
- Product Colour Model
- Product Size Model
- Product SEO Model
- Product Property Value Model
- Property Model
Brand Model
Represents a product brand or manufacturer.
Fields:
Id (type: long)- internal identifierName (type: string?)- brand display nameCode (type: string?)- unique brand code (per tenant)IsActive (type: bool?)- active flag
Validation:
IsReadyToAdd()- requires
NameandCode
- requires
IsReadyToUpdate()- requires
Id > 0 - requires
NameandCode IsActiveis optional
- requires
Category Model
Represents a product category.
Fields:
Id (type: long)- internal identifierName (type: string?)- category nameCode (type: string?)- category codeParentId (type: long)- optional parent categoryIsActive (type: bool?)- active flag
Validation:
IsReadyToAdd()- requires
NameandCode
- requires
IsReadyToUpdate()- requires
Id > 0 - requires
NameandCode
- requires
Product Model
Represents a catalog product with pricing, stock and dynamic properties.
The product entity is the core element of the Catalog module and is used across pricing, inventory and sales domains.
Fields:
Id (type: long)- internal product identifierCode (type: string?)- product code / SKUName (type: string?)- product display nameDescription (type: string?)- full product descriptionSummary (type: string?)- short product summaryIsActive (type: bool)- active flagBrand (type: string?)- associated brand nameTaxCode (type: long)- tax classification codeStock (type: List<StockModel>)- stock informationUnitPrice (type: decimal?)- base unit priceProperties (type: List<ProductPropertyModel>)- dynamic product properties
Notes:
- All fields are tenant-scoped
- Pricing and stock information may be overridden by other modules
- Properties allow extending the product model without schema changes
Product Colour Model
Represents a colour variant.
Fields:
Id (type: long)- internal identifierCreatedAt (type: DateTime)- creation timestampDescription (type: string?)- colour description or display nameCode (type: string?)- unique colour codeImageSwatchURL (type: string?)- URL to colour swatch imageIsActive (type: bool?)- active flag (default: true)
Validation:
IsReadyToAdd()- requires
Code,Description,ImageSwatchURL
- requires
IsReadyToUpdate()- requires
Id > 0 - requires
Code,Description,ImageSwatchURL
- requires
Product Size Model
Represents a size variant that can be assigned to products.
Fields:
Id (type: long)- internal identifierCreatedAt (type: DateTime)- creation timestampDescription (type: string?)- size descriptionCode (type: string?)- unique size codeIsActive (type: bool?)- active flag
Validation:
IsReadyToAdd()- requires
CodeandDescription
- requires
IsReadyToUpdate()- requires
Id > 0 - requires
CodeandDescription
- requires
Product SEO Model
Represents SEO metadata associated with a product.
Fields:
ProductId (type: long)- associated product identifierMetaTitle (type: string?)- SEO meta titleMetaDescription (type: string?)- SEO meta descriptionSlug (type: string)- URL-friendly product slugCanonicalUrl (type: string?)- canonical URL
Validation:
IsValid()- requires
ProductId - requires
MetaTitle - requires
MetaDescription - requires
Slug - requires
CanonicalUrl
- requires
Notes:
- Slug is normalized (lowercase, spaces replaced)
- Slug must be unique per product
Product Property Value Model
Represents a value assigned to a dynamic product property.
Fields:
ProductId (type: long)- associated product identifierPropertyId (type: long)- associated property identifierValue (type: string?)- property value
Validation:
IsEmpty()- returns true if
ProductId == 0orPropertyId == 0
- returns true if
Notes:
(ProductId, PropertyId)must be unique
Property Model
Represents a definable product attribute.
Fields:
Id (type: long)- internal identifierName (type: string)- property display nameCode (type: string)- unique property codeDataType (type: string)- expected value type (e.g. string, number, boolean)
Validation:
IsReadyToAdd()- requires
NameandCode
- requires
IsReadyToUpdate()- requires
Id > 0 - requires
Name,Code,DataType
- requires
Notes:
- Properties are reusable
- DataType controls value interpretation