3.4 KiB
3.4 KiB
08. Каталогный домен
Назначение
Каталогный домен описывает правила формирования витрин, листингов и поисковых выборок для tenant-магазина.
Поведение системы
- Каталог строится из API-данных и bootstrap-конфигурации.
- Bootstrap определяет структуру страниц каталога и виджеты.
- API возвращает содержимое: товары, категории, метаданные фильтров.
Обязательные JSON-свойства каталога
- catalog.defaultSort
- catalog.availableSorts
- catalog.enabledFilters
- catalog.layout
Опциональные свойства
- catalog.navigationMode
- catalog.loadingStrategy
- catalog.showBreadcrumbs
- catalog.showCategoryBanner
- catalog.showSubcategoryChips
- catalog.showRatings
- catalog.showDiscounts
- catalog.showAvailability
- catalog.suggestionsEnabled
- catalog.searchHistoryEnabled
- catalog.features (via bootstrap.features)
- catalog.facets (future backend-driven)
Строгие правила
- Каталог не содержит tenant-specific условий в frontend-коде.
- Сортировка и фильтры должны быть согласованы между frontend и backend.
- Видимость товаров контролируется данными backend, а не frontend-хардкодом.
- Пустая категория рендерит отдельный catalog empty-state, а не product grid empty-state.
- Корневой переход
All Categoriesвсегда возвращает category browser/catalog. - Loading strategy выбирается конфигурацией без дублирования list logic.
Reusable Domain Models
- SearchCriteria
- FilterDefinition
- FilterOption
- SortDefinition
- CatalogView
- SearchResult
Пример catalog JSON (bootstrap fragment)
{
"catalog": {
"layout": "grid-4",
"loadingStrategy": "pagination",
"defaultSort": "relevance",
"availableSorts": ["relevance", "latest", "price_asc", "price_desc", "rating", "popular", "discount"],
"enabledFilters": ["price", "availability", "rating", "brand", "category", "subcategory", "discount", "new", "color", "size", "attributes"],
"showBreadcrumbs": true,
"showCategoryBanner": true,
"showSubcategoryChips": true
}
}
Loading Strategies
paginationloadMoreinfiniteScroll
Grid Modes
grid-2grid-3grid-4listcompact
Legacy aliases still normalize safely:
gridlarge-gridcompact-grid
Ответственность Frontend
- Отобразить листинг, фильтры, сортировки и пагинацию.
- Синхронизировать состояние каталога с URL.
- Стабильно обрабатывать пустые и частично заполненные наборы данных.
Ответственность Backend
- Возвращать согласованные данные для листингов и фильтров.
- Гарантировать корректные totals/pagination.
- Поддерживать стабильные ключи сортировки и фильтрации.