# Баг: переключение компании — таблица IP не обновляется ## Симптом GET /v2/app?switchTo=WZ30001 → таблица показывает записи старой компании. ## Найденная причина №1 (основная) Порядок кода в `v2/src/user/index.js`: ```js // 1. clId = req.clientId ← resolveContext выставил СТАРЫЙ activeClientId const clId = req.clientId; // 2. crud.list() по СТАРОМУ clId — ещё до switchTo const { entries, used, limit } = await crud.list(clId, includeDeleted); // 3. Потом switchTo обновляет сессию и делает redirect if (req.query.switchTo) { req.session.user.activeClientId = targetId; return req.session.save(() => res.redirect('/v2/app')); } ``` Итог: первый запрос с ?switchTo загружает записи СТАРОЙ компании. Второй запрос (редирект /v2/app) должен уже использовать новый activeClientId — если ничто его не затирает. ## Найденная причина №2 (если ENV заданы) `v2/src/impersonation/index.js` — при тестовом режиме (IMPERSONATION_TARGET задан): ```js u.activeClientId = MAIN_COMPANY; // ← затирает то что записал switchTo ``` Middleware запускается при КАЖДОМ запросе (включая редирект после switchTo) и сбрасывает activeClientId обратно в IMPERSONATION_COMPANY. ## Что проверить ```bash echo $IMPERSONATION_COMPANY echo $IMPERSONATION_TARGET echo $IMPERSONATION_ORIGINAL ``` Если заданы → причина №2 (middleware затирает сессию). Если не заданы → причина №1 (но тогда второй запрос после редиректа должен работать). ## Фикс причины №1 В `v2/src/user/index.js` — переставить проверку switchTo ПЕРЕД crud.list(): ```js // Сначала switchTo if (req.query.switchTo) { const targetId = req.query.switchTo; const allowed = isAdmin || (req.profiles || []).find(p => p.client_id === targetId); if (allowed) { req.session.user.activeClientId = targetId; return req.session.save(err => { if (err) console.error('[switchTo] save error:', err.message); res.redirect('/v2/app'); }); } } // Потом загружать записи const { entries, used, limit } = await crud.list(clId, includeDeleted); ``` ## Фикс причины №2 В `v2/src/impersonation/index.js` — не перезаписывать activeClientId если он уже есть: ```js // Вместо: u.activeClientId = MAIN_COMPANY; // Сделать: u.activeClientId = u.activeClientId || MAIN_COMPANY; ```