Files
ipwhitelist-app/v2/history/ARCHITECTURE.md

2.7 KiB

V2 Unified Architecture — v0.5.105 (2026-06-15)

Как устроено

/v2/app — единый интерфейс
│
├── Юзер (isAdmin=false)
│   └── dropdown: свои компании из IAM (profiles[])
│
├── Админ (WZ01112, isAdmin=true)
│   ├── dropdown: все компании из БД
│   ├── свои помечены (личное)
│   └── email помечен (админ)
│
└── CRUD — одинаковый для обоих
    └── crud.list/add/edit/remove(clientId)

Слои

Слой Файл Что
CRUD API v2/src/crud/index.js Чистые функции, clientId → БД
SQL v2/src/db/queries.js Все запросы, транзакции
Роутер v2/src/user/index.js Express, сессия → crud
Шаблон views/v2/user.ejs EJS, единый для всех

Компании

  • clientId (W-номер) → company_id (внутренний PK) через getOrCreateCompany
  • По умолчанию: активный профиль из IAM (is_active_profile=true)
  • Админ может переключиться на любую компанию (?switchTo=W***)
  • Юзер — только на свои

История версий (новые сверху)

  • 0.5.139 — ширина столбцов: CIDR 125px, комментарий широкий, Правка вместо Редактирование
  • 0.5.138 — CSP script-src-attr 'unsafe-inline' → onchange заработал
  • 0.5.137 — onchange + console.log для проверки
  • 0.5.136 — ↺ зелёная, deleted сохраняется после restore/delete
  • 0.5.135 — UI таблицы: разделение столбцов, 💾, размеры
  • 0.5.134 — восстановление записей (restore), кнопка удалённых, время МСК
  • 0.5.133 — type=submit на кнопке удаления
  • 0.5.132 — ADMIN_EMAIL в resolveContext для всех
  • 0.5.131 — isAdmin при имперсонации по ADMIN_EMAIL
  • 0.5.130 — имперсонация не сохраняет isAdmin от оригинала
  • 0.5.129 — кнопка Выбрать, убран debug
  • 0.5.127 — clId обновляется после switchTo (фикс бага)
  • 0.5.105 — убран toggle Администратор
  • 0.5.104 — (личное) у своих компаний в dropdown
  • 0.5.103 — WZ01112: adminMode auto-on
  • 0.5.102 — единый интерфейс /v2/app (юзер+админ)