refactor: шаг 1 — MOCK_USERS и backUrl вынесены в src/config.js

This commit is contained in:
2026-05-30 13:35:16 +03:00
parent 695ed231e6
commit 631641bbf0
2 changed files with 76 additions and 20 deletions
+74
View File
@@ -0,0 +1,74 @@
/**
* src/config.js — общие константы и утилиты приложения.
*
* Вынесено из server.js чтобы:
* 1. Роуты могли импортировать MOCK_USERS и backUrl без циклических зависимостей.
* 2. Конфигурация была в одном месте — проще менять и тестировать.
*
* Этот файл не зависит ни от Express, ни от БД — чистые данные и функции.
*/
'use strict';
// ── Мок-пользователи (только dev/staging) ─────────────────────────────────────
// В продакшене этот список не используется — вход через Keycloak.
// clientId соответствует WZ-номеру компании в Nubes.
// companyId — UUID клиента (из Keycloak-токена в продакшене).
const MOCK_USERS = [
{
id: 'admin',
label: 'Администратор (WZ01112)',
role: 'admin',
clientId: 'WZ01112',
companyId: 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee',
companyName: 'Nubes Admin',
email: 'admin@nubes.ru',
},
{
id: 'test',
label: 'Тест (WZ01325)',
role: 'user',
clientId: 'WZ01325',
companyId: '3e64aac6-dcfc-4082-88dc-da19c86555a5',
companyName: 'Тест',
email: 'tazet@narod.ru',
},
{
id: 'client2',
label: 'Компания 2 (WZ02001)',
role: 'user',
clientId: 'WZ02001',
companyId: '11111111-2222-3333-4444-555555555555',
companyName: 'Вторая Компания',
email: 'user2@example.com',
},
];
// ── backUrl — строит URL для редиректа после мутирующего действия ──────────────
//
// Логика:
// • admin всегда видит страницу в контексте конкретной компании (?company=<id>).
// Поэтому после POST /add, /edit, /delete редиректим туда же.
// • Обычный пользователь видит только свою страницу — просто /.
//
// extra — дополнительные query-параметры, например { message: 'Добавлено' }
// или { error: 'Лимит исчерпан' }.
//
// Примеры:
// backUrl(true, 42, { message: 'OK' }) → '/?company=42&message=OK'
// backUrl(false, 42, { error: 'Err' }) → '/?error=Err'
// backUrl(false, null, {}) → '/'
function backUrl(isAdmin, companyId, extra = {}) {
const qs = new URLSearchParams();
// Добавляем company только для admin и только если companyId задан
if (isAdmin && companyId) qs.set('company', companyId);
// Добавляем все дополнительные параметры (message, error, wasNormalized и др.)
for (const [k, v] of Object.entries(extra)) qs.set(k, String(v));
const str = qs.toString();
return str ? '/?' + str : '/';
}
module.exports = { MOCK_USERS, backUrl };