This commit is contained in:
59
docs/platform/10-product-domain.md
Normal file
59
docs/platform/10-product-domain.md
Normal file
@@ -0,0 +1,59 @@
|
||||
# 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
|
||||
- Возвращать актуальные цены и доступность.
|
||||
- Стабильно поддерживать идентификаторы товаров.
|
||||
- Предоставлять медиа и атрибуты в согласованном формате.
|
||||
Reference in New Issue
Block a user