diff --git a/server/routes/auth.users.routes.ts b/server/routes/auth.users.routes.ts
index e9fab65..7e5f9b6 100644
--- a/server/routes/auth.users.routes.ts
+++ b/server/routes/auth.users.routes.ts
@@ -5,6 +5,9 @@ import { authService } from "../services/auth.service";
import { authenticateToken, requirePermission, type AuthenticatedRequest } from "../middleware/auth.middleware";
import { tenantIsolation } from "../middleware/tenant.middleware";
import { validateRequest } from "../middleware/validation.middleware";
+import { db } from "../db";
+import { inArray } from "drizzle-orm";
+import { userProfileFieldValues } from "@shared/schema";
import {
createUserCustomFieldSchema, updateUserCustomFieldSchema,
setUserCustomValueSchema,
@@ -198,6 +201,22 @@ export function registerUserManagementRoutes(router: Router): void {
return '';
};
+ // Значения кастомных полей профиля — для реестра пользователей (выбор колонок).
+ // ВНИМАНИЕ: этот обработчик /api/users/list фактически обслуживает запросы
+ // (зарегистрирован раньше дубля в user.routes.ts handleListUsers).
+ const includeFieldValues = req.query.includeFieldValues === '1';
+ const fieldValuesMap = new Map>();
+ if (includeFieldValues && users.length > 0) {
+ const fvRows = await db
+ .select({ userId: userProfileFieldValues.userId, fieldId: userProfileFieldValues.fieldId, value: userProfileFieldValues.value })
+ .from(userProfileFieldValues)
+ .where(inArray(userProfileFieldValues.userId, users.map(u => u.id)));
+ for (const row of fvRows) {
+ if (!fieldValuesMap.has(row.userId)) fieldValuesMap.set(row.userId, {});
+ fieldValuesMap.get(row.userId)![row.fieldId] = row.value;
+ }
+ }
+
let safeUsers = users.map(user => ({
id: user.id,
email: user.email,
@@ -212,6 +231,7 @@ export function registerUserManagementRoutes(router: Router): void {
lastActivityAt: user.lastActivityAt,
createdAt: user.createdAt,
organizationalRoles: roleMembersMap.get(user.id) || [],
+ ...(includeFieldValues ? { fieldValues: fieldValuesMap.get(user.id) || {} } : {}),
}));
Object.entries(filtersObj).forEach(([col, val]) => {