Files
marketplaces/docs/Category-Domain-Report.md
2026-07-05 01:24:54 +04:00

4.2 KiB

Category Domain Report

Scope

Sprint 4 added a complete Category Domain on top of the existing backend API contract. Backend endpoints and payload names were not changed.

Existing backend category fields remain isolated as DTO input:

  • categoryID
  • parentID
  • name
  • icon
  • priority
  • visible
  • categoriesCount
  • itemCount
  • names[]

The UI now consumes category domain models rather than backend-shaped category responses.

Implemented Files

DTO

  • src/app/core/categories/dto/category.dto.ts

Defines CategoryDto and CategoryNameDto for existing backend category payloads. Compatibility fields for current mock/API variants are accepted only at the DTO boundary.

Domain Model

  • src/app/core/categories/models/category-domain.model.ts

Frontend category model exposes:

  • id
  • parentId
  • title
  • icon
  • priority
  • visible
  • itemCount
  • children[]
  • translations

No backend category naming is required by category UI consumers.

Mapper

  • src/app/core/categories/mappers/category.mapper.ts

Maps backend DTOs into domain categories, including:

  • backend id normalization
  • parent id normalization
  • title fallback selection
  • names[] to translations
  • nested DTO flattening
  • visible-category filtering
  • priority sorting
  • duplicate id de-duplication

Tree Utilities

  • src/app/core/categories/utils/category-tree.utils.ts

Supports:

  • flat list to tree
  • unlimited nesting
  • parent lookup
  • children lookup
  • breadcrumb generation
  • leaf detection
  • tree flattening for future lazy-loading compatibility

Repository Abstraction

  • src/app/core/categories/repositories/category.repository.ts
  • src/app/core/categories/repositories/api-category.repository.ts
  • src/app/core/categories/category-repository.token.ts

CategoryRepository returns DTOs from the existing GET /category API. The injection token uses the existing runtime provider strategy and remains compatible with both mock and API modes. Mock mode continues to work through the existing mock-data interceptor.

Category Service

  • src/app/core/categories/category.service.ts

Converts repository DTOs through the mapper and exposes domain methods:

  • all categories
  • category tree
  • root categories
  • category by id
  • children
  • parent
  • breadcrumb
  • leaf detection

Category Facade

  • src/app/facades/platform/category.facade.ts

Exposes observable streams and state for:

  • all categories
  • category tree
  • root categories
  • category by id
  • selected category
  • breadcrumb
  • children

Product Compatibility

  • src/app/core/products/models/product-domain.model.ts
  • src/app/core/products/providers/api-product-data.provider.ts

ProductFacade.getCategories() now resolves through CategoryService, so compatibility category access also returns the new category domain model.

UI Migration

Updated category-facing UI consumers:

  • src/app/pages/home/home.component.ts
  • src/app/pages/home/home.component.html
  • src/app/pages/category/subcategories.component.ts
  • src/app/pages/category/subcategories.component.html
  • src/app/pages/category/category.component.ts

The home page and subcategory page now consume CategoryFacade and Category domain models. Category route item loading still uses the existing product facade for product lists, without changing product/payment/auth contracts.

Validation

Completed checks:

  • DTOs are isolated under core/categories/dto.
  • Category mapper exists and is the only category DTO-to-domain conversion point.
  • Category UI uses CategoryFacade and category domain models.
  • Category backend field names are contained to the category DTO/mapper boundary and compatibility internals.
  • Components do not use HttpClient for category data.
  • No authentication changes were made.
  • No payment changes were made.
  • No bootstrap contract changes were made.
  • No backend API contract changes were made.
  • Mock/API compatibility is preserved through the repository token and existing mock interceptor.

Build validation passed:

npm run build

Stop Point

Category Domain implementation is complete for Sprint 4. Stop here for approval before starting the next domain or any Builder/Backoffice work.