feat(ux): implement sprint 11 user experience module
This commit is contained in:
@@ -130,6 +130,49 @@ Purpose:
|
||||
Must not change:
|
||||
- acknowledgement contract expected by frontend engagement form.
|
||||
|
||||
## /me/wishlist (future-ready)
|
||||
Purpose:
|
||||
- authenticated wishlist synchronization across devices.
|
||||
|
||||
High-level response shape:
|
||||
- wishlist product references
|
||||
- optional addedAt metadata
|
||||
|
||||
Tenant rule:
|
||||
- wishlist entries must remain tenant-scoped.
|
||||
|
||||
## /me/compare (future-ready)
|
||||
Purpose:
|
||||
- optional compare list synchronization for authenticated users.
|
||||
|
||||
High-level response shape:
|
||||
- compared product references
|
||||
- optional addedAt metadata
|
||||
|
||||
Tenant rule:
|
||||
- compare list must be isolated by tenant + user.
|
||||
|
||||
## /me/saved-searches (future-ready)
|
||||
Purpose:
|
||||
- persist and restore saved search presets.
|
||||
|
||||
High-level response shape:
|
||||
- saved query/filter/sort presets
|
||||
- timestamps and id
|
||||
|
||||
Tenant rule:
|
||||
- saved searches must be tenant-scoped and user-scoped.
|
||||
|
||||
## /me/recently-viewed (future-ready)
|
||||
Purpose:
|
||||
- synchronize recently viewed product history for authenticated users.
|
||||
|
||||
High-level response shape:
|
||||
- product references + viewedAt metadata
|
||||
|
||||
Tenant rule:
|
||||
- history must remain tenant-scoped and privacy-safe.
|
||||
|
||||
## /categories
|
||||
Purpose:
|
||||
- category tree retrieval
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user