56 lines
2.3 KiB
Markdown
56 lines
2.3 KiB
Markdown
# 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.
|