- v2/src/auth/index.js — login(), fetchIamUser(), exchangeCode(), buildAuthUrl()
- v2/src/config/index.js — приоритет V2_* → KC_* → умолчания
- v2/server.js — createV2Router(), монтируется в server.js как /v2
- server.js — app.use('/v2', createV2Router()) перед UI-роутером
- bump 0.5.57 → 0.5.58
62 lines
2.7 KiB
Markdown
62 lines
2.7 KiB
Markdown
# Сессия 2026-06-12
|
|
|
|
## Архитектурный анализ
|
|
|
|
**Вердикт: модульный монолит (modular monolith)**
|
|
|
|
Не чистый монолит, не микросервисы. Осмысленная архитектура с DI и разделением на слои.
|
|
|
|
### Слои
|
|
|
|
```
|
|
UI (EJS) → HTTP → API (JSON) → Queries → PostgreSQL
|
|
↑
|
|
DI через фабрики:
|
|
createApiRouter({ auth, q })
|
|
```
|
|
|
|
UI не ходит в БД напрямую — всегда через `ui/api-client.js` → HTTP → `/api/v1/*`. Разделение по протоколу.
|
|
|
|
### Степень связанности
|
|
|
|
| Модуль | Связанность | Почему |
|
|
|--------|-------------|--------|
|
|
| `validators.js` | Ноль | Только `net`, чистые функции |
|
|
| `config.js` | Ноль | Чистые данные |
|
|
| `api-client.js` | Ноль | Только `http`/`https` |
|
|
| `bearerAuth.js` | Ноль | Standalone middleware |
|
|
| `queries.js` → `db.js` | Tight | Data-access — иначе быть не может |
|
|
| `server.js` → всё | Tight | Оркестратор — нормально |
|
|
|
|
### Что хорошо
|
|
|
|
- DI-паттерн: роутеры получают зависимости через фабрики
|
|
- Нет циклических зависимостей — граф чистый DAG
|
|
- Большинство модулей тестируемы изолированно
|
|
- Лёгкий вынос API в микросервис: поменять `API_BASE` в `api-client.js`
|
|
|
|
### Что не очень
|
|
|
|
- `server.js` знает про все модули (15 импортов) — но для монолита норма
|
|
- `src/auth.js` делает и JWT, и IAM, и bearer — можно разделить
|
|
- Дублирование `buildSessionUser` в `oidc.js` и `auth.js`
|
|
|
|
### Граф зависимостей
|
|
|
|
```
|
|
server.js
|
|
├── src/db.js → pg
|
|
├── src/middleware/session.js → express-session, connect-pg-simple
|
|
├── src/middleware/csp.js
|
|
├── src/middleware/rateLimit.js
|
|
├── src/auth.js → src/config.js
|
|
├── src/queries.js → src/db.js, src/validators.js
|
|
├── src/validators.js → net
|
|
├── src/config.js (ноль зависимостей)
|
|
├── src/api/index.js → src/api/routes/* → src/validators.js
|
|
│ └── src/api/middleware/bearerAuth.js (ноль зависимостей)
|
|
├── ui/index.js → ui/routes/* → ui/api-client.js (только http/https)
|
|
│ └── ui/routes/auth.js → src/auth.js (только safeReturn)
|
|
└── src/routes/oidc.js
|
|
```
|