60 lines
2.2 KiB
Markdown
60 lines
2.2 KiB
Markdown
|
|
# 10. Домен товаров
|
||
|
|
|
||
|
|
## Назначение
|
||
|
|
Товарный домен определяет контракт карточки товара, листингов, ценовых и складских атрибутов.
|
||
|
|
|
||
|
|
## Поведение системы
|
||
|
|
- Товары загружаются по API для листинга, карточки и связанных коллекций.
|
||
|
|
- Frontend отображает только те поля, которые есть в контракте.
|
||
|
|
- Бизнес-правила доступности товара приходят из backend.
|
||
|
|
|
||
|
|
## Обязательные JSON-свойства товара
|
||
|
|
- itemID
|
||
|
|
- name
|
||
|
|
- price
|
||
|
|
- currency
|
||
|
|
- categoryID
|
||
|
|
- visible
|
||
|
|
|
||
|
|
## Опциональные свойства
|
||
|
|
- discount
|
||
|
|
- images
|
||
|
|
- badges
|
||
|
|
- simpleDescription
|
||
|
|
- attributes
|
||
|
|
- stockStatus
|
||
|
|
- rating
|
||
|
|
|
||
|
|
## Строгие правила
|
||
|
|
- Цена и валюта должны передаваться как валидная пара.
|
||
|
|
- Скрытые товары не участвуют в публичных витринах.
|
||
|
|
- categoryID должен ссылаться на существующую категорию.
|
||
|
|
- Виджет не изменяет товарные данные, только отображает.
|
||
|
|
|
||
|
|
## Пример JSON товара
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"itemID": 7812,
|
||
|
|
"name": "Laptop Pro 14",
|
||
|
|
"price": 129990,
|
||
|
|
"currency": "RUB",
|
||
|
|
"categoryID": 55,
|
||
|
|
"visible": true,
|
||
|
|
"discount": 10,
|
||
|
|
"images": [
|
||
|
|
{ "url": "https://cdn.example.com/items/7812/main.jpg", "isMain": true }
|
||
|
|
],
|
||
|
|
"badges": ["featured", "new"]
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
## Ответственность Frontend
|
||
|
|
- Показывать корректную цену, скидку, бейджи и доступность.
|
||
|
|
- Поддерживать переход из листинга в карточку товара.
|
||
|
|
- Учитывать locale/currency из tenant-конфигурации.
|
||
|
|
|
||
|
|
## Ответственность Backend
|
||
|
|
- Возвращать актуальные цены и доступность.
|
||
|
|
- Стабильно поддерживать идентификаторы товаров.
|
||
|
|
- Предоставлять медиа и атрибуты в согласованном формате.
|