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

54 lines
2.7 KiB
Markdown

# 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 (юзер+админ)