feat(ux): implement sprint 11 user experience module

This commit is contained in:
sdarbinyan
2026-07-09 01:13:54 +04:00
parent 1a8f916942
commit 92e1bdaff8
59 changed files with 2062 additions and 25 deletions

View File

@@ -56,6 +56,7 @@ Bootstrap JSON является главным конфигурационным
- footer
- catalog
- productPage
- userExperience
- staticPages
- widgetRegistry
- visibility
@@ -100,6 +101,24 @@ Bootstrap JSON является главным конфигурационным
- productPage.tabs.items: array (description/specifications/reviews/questions/delivery/warranty)
- productPage.relatedProducts.enabled: boolean
### User Experience Config (опционально)
- userExperience.wishlist.enabled: boolean
- userExperience.wishlist.headerBadgeEnabled: boolean
- userExperience.compare.enabled: boolean
- userExperience.compare.maxItems: number
- userExperience.compare.hideIdenticalDefault: boolean
- userExperience.compare.highlightDifferencesDefault: boolean
- userExperience.recentlyViewed.enabled: boolean
- userExperience.recentlyViewed.maxItems: number
- userExperience.recentlyViewed.widgetEnabled: boolean
- userExperience.share.enabled: boolean
- userExperience.continueBrowsing.enabled: boolean
- userExperience.savedSearches.enabled: boolean
- userExperience.savedSearches.maxItems: number
Правило:
- Для userExperience допускаются только feature-конфиги (flags/limits/default behaviors), без пользовательских списков (wishlist/compare/recentlyViewed/saved searches) и без product payloads.
## Пример полного минимального bootstrap
```json
{

View File

@@ -50,6 +50,27 @@
- Backend may introduce new sort IDs via bootstrap `catalog.availableSorts`.
- Frontend must render unknown sort keys safely if label mapping is provided.
## User Experience API Expectations (architecture-ready)
- Wishlist (authenticated mode, future-ready):
- GET /me/wishlist
- POST /me/wishlist
- DELETE /me/wishlist/{itemId}
- Compare list (optional sync for authenticated mode):
- GET /me/compare
- POST /me/compare
- DELETE /me/compare/{itemId}
- Saved searches:
- GET /me/saved-searches
- POST /me/saved-searches
- DELETE /me/saved-searches/{id}
- Recently viewed sync (optional):
- GET /me/recently-viewed
- POST /me/recently-viewed
Правила:
- Guest mode может хранить UX данные локально (local storage) без backend-запросов.
- UI не вызывает HttpClient напрямую: Feature -> Facade -> Repository/Provider.
## Пример API ответа: категории
```json
{

View File

@@ -10,6 +10,7 @@
- Выдача навигации, статических страниц и feature flags.
- Product Engagement API для рейтинга, отзывов и вопросов.
- Advanced Search API для keyword/suggestions/filter metadata/sorting.
- User Experience API (future-ready): wishlist/compare/saved-searches/recently-viewed sync for authenticated users.
### Контракт статических страниц
Backend должен поддерживать формат:
@@ -48,6 +49,19 @@ Backend должен поддерживать формат:
- GET /search/suggestions?q={term} (future-ready)
- GET /catalog/filters?category={id}&q={term} (future-ready)
## User Experience endpoints (future-ready)
- GET /me/wishlist
- POST /me/wishlist
- DELETE /me/wishlist/{itemId}
- GET /me/compare
- POST /me/compare
- DELETE /me/compare/{itemId}
- GET /me/saved-searches
- POST /me/saved-searches
- DELETE /me/saved-searches/{id}
- GET /me/recently-viewed
- POST /me/recently-viewed
## Catalog bootstrap contract expectations
- Backend should populate `catalog.availableSorts` and `catalog.enabledFilters`.
- Backend should not include product list or filter results inside bootstrap.