# 07. Tenant System ## Назначение Tenant System обеспечивает запуск нескольких независимых магазинов на единой платформе через доменное разделение и конфигурационный bootstrap. ## Поведение системы - Tenant определяется только по hostname запроса. - По tenant выбираются конфигурации bootstrap, тема, локализация и API base. - Frontend не хранит статических tenant-switch правил в коде. ## Обязательные свойства JSON - tenant.id - tenant.slug - tenant.host - tenant.defaultLocale - tenant.supportedLocales - tenant.defaultCurrency ## Опциональные свойства JSON - tenant.timezone - tenant.brandName - tenant.websiteBaseUrl - tenant.builderBaseUrl - tenant.backofficeBaseUrl ## Строгие правила - Нельзя определять tenant через query params или localStorage как источник истины. - Нельзя хардкодить tenant ID внутри компонентов. - Один домен может быть связан только с одним активным tenant в момент запроса. - При отсутствии tenant-конфигурации runtime должен завершаться контролируемой ошибкой. ## Пример tenant JSON ```json { "tenant": { "id": "tenant-lavero", "slug": "lavero", "host": "lavero.marketplace.com", "defaultLocale": "ru", "supportedLocales": ["ru", "en", "hy"], "defaultCurrency": "RUB", "timezone": "Europe/Moscow" } } ``` ## Ответственность Frontend - Резолвить tenant на старте приложения. - Использовать tenant-параметры для формирования маршрутов, локали и API-слоя. - Исключать fallback на чужой tenant без явной backend-политики. ## Ответственность Backend - Поддерживать доменно-tenant маппинг. - Возвращать корректную tenant-конфигурацию и bootstrap. - Контролировать изоляцию данных между tenants.