Files
EvoBGP/memory-bank/creative/creative-tenant-settings-ui.md
DenozordecandCursor ceb6f2f34f docs(memory-bank): add creative phase CP-1 tenant settings UI
Решение: /tenant-settings с вкладками BIRD/Ревизии/Дополнительно, пункт mainNav «Параметры», /settings остаётся frontend-only.

Co-authored-by: Cursor <[email protected]>
2026-06-12 18:57:17 +07:00

78 lines
4.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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`, icon `SlidersHorizontal`
- **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**