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

4.4 KiB
Raw Permalink Blame History

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