82 lines
3.4 KiB
Markdown
82 lines
3.4 KiB
Markdown
|
|
# 01. Архитектура платформы
|
|||
|
|
|
|||
|
|
## Назначение
|
|||
|
|
Документ определяет архитектурную модель многоарендной платформы маркетплейсов и обязательные границы между конфигурацией, frontend-runtime и backend-данными.
|
|||
|
|
|
|||
|
|
## Поведение системы
|
|||
|
|
- Платформа использует единую frontend-кодовую базу для всех tenants.
|
|||
|
|
- При старте приложение определяет tenant по домену.
|
|||
|
|
- Затем загружается bootstrap-конфигурация.
|
|||
|
|
- На основе конфигурации рендерятся страницы, секции и виджеты.
|
|||
|
|
- Доменный контент (товары, категории, остатки) подгружается через backend API.
|
|||
|
|
|
|||
|
|
## Архитектурные слои
|
|||
|
|
1. Tenant Resolution Layer: определение tenant из host.
|
|||
|
|
2. Bootstrap Layer: загрузка конфигурации UI и маршрутов.
|
|||
|
|
3. Section/Layout Engine: построение структуры страницы.
|
|||
|
|
4. Widget Engine: отрисовка и наполнение reusable виджетов.
|
|||
|
|
5. Domain Data Layer: доступ к API продуктов и категорий.
|
|||
|
|
|
|||
|
|
## Обязательные JSON-секции
|
|||
|
|
- tenant
|
|||
|
|
- layout
|
|||
|
|
- pages
|
|||
|
|
- sections
|
|||
|
|
- widgets
|
|||
|
|
- widgetRegistry
|
|||
|
|
- theme
|
|||
|
|
- apiEndpoints
|
|||
|
|
- footer
|
|||
|
|
- staticPages
|
|||
|
|
|
|||
|
|
## Опциональные JSON-секции
|
|||
|
|
- featureFlags
|
|||
|
|
- localization
|
|||
|
|
- seo
|
|||
|
|
- permissions
|
|||
|
|
- integrations
|
|||
|
|
|
|||
|
|
## Строгие правила
|
|||
|
|
- Запрещено смешивать layout-логику и data-fetch в виджетах.
|
|||
|
|
- Запрещено tenant-specific ветвление в компонентах frontend.
|
|||
|
|
- Backend может отдавать HTML-контент только для статических страниц (about/privacy/terms) через контролируемый контракт.
|
|||
|
|
- Такой контент рендерится только через безопасную sanitization-цепочку.
|
|||
|
|
- Запрещено добавлять новые обязательные поля без обновления schemaVersion.
|
|||
|
|
|
|||
|
|
## Пример архитектурного bootstrap-фрагмента
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"tenant": {
|
|||
|
|
"id": "tenant-novo",
|
|||
|
|
"host": "novo.marketplace.com"
|
|||
|
|
},
|
|||
|
|
"apiEndpoints": {
|
|||
|
|
"catalog": { "baseUrl": "https://api.marketplace.com" }
|
|||
|
|
},
|
|||
|
|
"pages": [
|
|||
|
|
{
|
|||
|
|
"id": "home",
|
|||
|
|
"sections": [
|
|||
|
|
{
|
|||
|
|
"id": "hero-1",
|
|||
|
|
"type": "hero",
|
|||
|
|
"widgets": [
|
|||
|
|
{ "id": "w-hero", "type": "hero", "dataSource": { "kind": "static" } }
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Ответственность Frontend
|
|||
|
|
- Следовать слоям архитектуры без cross-layer обходов.
|
|||
|
|
- Выполнять fail-safe рендер при частично валидной конфигурации.
|
|||
|
|
- Логировать нарушения контрактов конфигурации.
|
|||
|
|
|
|||
|
|
## Ответственность Backend
|
|||
|
|
- Отдавать данные строго по контракту API.
|
|||
|
|
- Гарантировать tenant-aware ответы.
|
|||
|
|
- Поддерживать прогнозируемую схему и документацию изменений.
|