# 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 ответы. - Поддерживать прогнозируемую схему и документацию изменений.