User/Usergroup Pages first draft
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
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);
|
||||
}
|
||||
Reference in New Issue
Block a user