Files
marketplaces/docs/platform/02-bootstrap-json-spec.md

138 lines
4.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 02. Спецификация bootstrap.json
## Назначение
Bootstrap JSON является главным конфигурационным документом витрины. Он определяет структуру страниц, секций, виджетов, тему и подключение источников данных.
## Поведение системы
- Frontend загружает bootstrap.json на старте runtime.
- Конфигурация валидируется по обязательным полям.
- После валидации строится UI без хардкода tenant-логики.
## Обязательные свойства
- schemaVersion: string
- tenant: object
- theme: object
- layout: object
- pages: array
- apiEndpoints: object
### Обязательные свойства tenant
- id: string
- slug: string
- host: string
- defaultLocale: string
- supportedLocales: string[]
### Обязательные свойства страницы
- id: string
- key: string
- route.path: string
- sections: array
### Обязательные свойства секции
- id: string
- type: string
- order: number
- widgets: array
### Обязательные свойства виджета
- id: string
- type: string
- version: string
### Поддерживаемые layout.type
- default
- sidebar-left
- carousel-home
- minimal
## Опциональные свойства
- featureFlags
- localization
- seo
- permissions
- branding
- navigation
- footer
- productPage
- staticPages
- widgetRegistry
- visibility
- layout
- dataSource
## Строгие правила
- Поля обязательной схемы не могут быть null.
- route.path должен быть уникальным в рамках tenant.
- id страниц, секций и виджетов должен быть уникальным в своей области.
- В одной секции порядок order не может дублироваться.
- Виджеты не содержат backend URL в props; URL управляются только apiEndpoints.
- Для виджетов допустимы metadata поля: order, padding, visibility.desktop/tablet/mobile.
- Для footer links/legal/payout icons источник истины — bootstrap JSON.
- Для staticPages контент поддерживается в формате multilingual HTML и рендерится только через safe sanitizer.
- Для productPage допускаются только feature-конфиги (enabled/pageSize/tabs/showSummary), без доменных данных отзывов и вопросов.
### Product Engagement Config (опционально)
- productPage.rating.enabled: boolean
- productPage.reviews.enabled: boolean
- productPage.reviews.pageSize: number
- productPage.reviews.showSummary: boolean
- productPage.questions.enabled: boolean
- productPage.questions.pageSize: number
- productPage.tabs.enabled: boolean
- productPage.tabs.items: array (description/specifications/reviews/questions/delivery/warranty)
- productPage.relatedProducts.enabled: boolean
## Пример полного минимального bootstrap
```json
{
"schemaVersion": "1.0.0",
"tenant": {
"id": "tenant-default",
"slug": "default",
"host": "default.marketplace.com",
"defaultLocale": "ru",
"supportedLocales": ["ru", "en"]
},
"theme": {
"themeId": "default-light",
"palette": {
"primary": "#497671",
"textPrimary": "#1e3c38",
"backgroundPrimary": "#ffffff"
}
},
"apiEndpoints": {
"catalog": { "baseUrl": "https://api.marketplace.com" },
"bootstrap": { "path": "/bootstrap" }
},
"pages": [
{
"id": "page-home",
"key": "home",
"route": { "path": "/", "exact": true },
"sections": [
{
"id": "section-hero",
"type": "hero",
"order": 1,
"widgets": [
{ "id": "widget-hero", "type": "hero", "version": "1.0.0" }
]
}
]
}
]
}
```
## Ответственность Frontend
- Валидировать обязательные поля до рендера.
- Применять значения опциональных полей только при наличии.
- Прекращать инициализацию при критической невалидности схемы.
## Ответственность Backend
- Отдавать tenant-specific bootstrap.json.
- Поддерживать schemaVersion и changelog контракта.
- Не включать frontend-специфические runtime-хуки в JSON.