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.
|