Решение: /tenant-settings с вкладками BIRD/Ревизии/Дополнительно, пункт mainNav «Параметры», /settings остаётся frontend-only. Co-authored-by: Cursor <[email protected]>
4.4 KiB
4.4 KiB
Creative: Tenant Settings UI (CP-1)
📌 CREATIVE PHASE START: Tenant Settings Module ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1️⃣ PROBLEM
Description: Tenant-настройки (global_settings, /v1/settings) разбросаны: вкладка «Система» в Operations и форма BIRD на /network. /settings зарезервирован под frontend (токен, тема). Нужен отдельный модуль без смешения с browser settings.
Requirements:
- Один route для всех tenant KV (BIRD, revision retention, custom)
- Роли: viewer — read; operator — PATCH
- Переиспользовать существующие схемы (
bird-settings.schema,revision-settings.schema,settings-api.ts) - Убрать дубли из Operations и Network
Constraints:
- Контракт API не менять на UI-фазе
- shadcn-svelte, Svelte 5 runes, superforms
- WEB-16: ConfirmDialog для удаления custom keys
2️⃣ OPTIONS
| Option | Описание |
|---|---|
| A | Одна страница /tenant-settings с Tabs: BIRD / Ревизии / Дополнительно |
| B | Три отдельных route: /tenant-settings/bird, /revision, /extra |
| C | Accordion на одной длинной странице без tabs |
| D | Оставить BIRD на Network, перенести только revision+KV |
3️⃣ ANALYSIS
| Criterion | A Tabs | B Multi-route | C Accordion | D Partial |
|---|---|---|---|---|
| Discoverability | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ | ⭐⭐ |
| Соответствие плану | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ | ⭐ |
| Меньше дублирования | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐ |
| Сложность реализации | ⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| Консистентность с Monitoring/Ops tabs | ⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐ | ⭐⭐ |
Key insights:
- Monitoring уже использует
Tabs(system/postgres) — паттерн знаком оператору. - BIRD и revision логически связаны с pipeline/bundles — держать вместе усиливает «единый центр tenant config».
- Отдельные routes (B) дают deep links, но избыточны для ~10 полей.
4️⃣ DECISION
Selected: Option A — /tenant-settings с тремя вкладками.
Navigation:
- mainNav (не bottom): новый пункт
Параметры→/tenant-settings, iconSlidersHorizontal - bottomNav
/settings— без изменений семантики («Настройки интерфейса») - Network: Card «BIRD (кратко)» + кнопка «Изменить параметры» →
/tenant-settings?tab=bird - Operations: удалить tab
system; в quick actions / empty state — ссылка на/tenant-settings
Tab structure:
| Tab value | Label | Компонент | Сохранение |
|---|---|---|---|
bird |
BIRD | TenantBirdSettingsCard (из BirdSettingsForm) |
PATCH known bird_* |
revision |
Ревизии | TenantRevisionSettingsCard |
PATCH revision_retention_minutes |
additional |
Дополнительно | TenantAdditionalSettingsCard |
PATCH custom KV, operator |
URL: ?tab=bird|revision|additional (как Operations ?tab=jobs).
Rationale: минимальный diff, один mental model «параметры tenant», переиспользование tabs-паттерна Monitoring.
5️⃣ IMPLEMENTATION NOTES
web/src/routes/tenant-settings/+page.svelte— PageHeader + Tabs- Вынести карточки в
web/src/lib/components/tenant-settings/ - Общий
loadSettings()/patchSettings()изsettings-api.ts - PageHeader description: «Параметры control plane для текущего tenant (API /v1/settings)»
- Не показывать на этой странице token/theme
- После миграции: удалить
OperationsSystemSettingsTab, упроститьnetwork/+page.svelte
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 📌 CREATIVE PHASE END: Tenant Settings UI