Files
stackpulse/backend/users/index.js
T
2025-10-27 19:36:44 +00:00

45 lines
1.0 KiB
JavaScript

import { db } from '../db/index.js';
const selectUsersWithGroups = db.prepare(`
SELECT
u.id,
u.username,
u.email,
u.is_active,
u.last_login,
u.created_at,
u.updated_at,
GROUP_CONCAT(g.name, '|||') AS group_names
FROM users u
LEFT JOIN user_group_memberships m ON m.user_id = u.id
LEFT JOIN user_groups g ON g.id = m.group_id
GROUP BY u.id
ORDER BY u.username COLLATE NOCASE
`);
const normalizeGroupNames = (rawNames) => {
if (!rawNames) {
return [];
}
return rawNames
.split('|||')
.map((name) => String(name || '').trim())
.filter(Boolean);
};
const sanitizeUserRecord = (row) => ({
id: row.id,
username: row.username,
email: row.email,
isActive: Boolean(row.is_active),
lastLogin: row.last_login || null,
createdAt: row.created_at || null,
updatedAt: row.updated_at || null,
groups: normalizeGroupNames(row.group_names)
});
export function listUsers() {
const rows = selectUsersWithGroups.all();
return rows.map(sanitizeUserRecord);
}