37 lines
987 B
JavaScript
37 lines
987 B
JavaScript
import { Router } from 'express';
|
|
import SQL from 'sql-template-strings';
|
|
import avatar from '../avatar';
|
|
|
|
const router = Router();
|
|
|
|
router.get('/admin/users', async (req, res) => {
|
|
if (!req.admin) {
|
|
return res.status(401).json({error: 'Unauthorised'});
|
|
}
|
|
|
|
const users = await req.db.all(SQL`
|
|
SELECT u.id, u.username, u.email, u.roles, u.avatarSource, p.locale
|
|
FROM users u
|
|
LEFT JOIN profiles p ON p.userId = u.id
|
|
ORDER BY u.id DESC
|
|
`);
|
|
|
|
const groupedUsers = {};
|
|
for (let user of users) {
|
|
if (groupedUsers[user.id] === undefined) {
|
|
groupedUsers[user.id] = {
|
|
...user,
|
|
locale: undefined,
|
|
profiles: user.locale ? [user.locale] : [],
|
|
avatar: await avatar(req.db, user),
|
|
}
|
|
} else {
|
|
groupedUsers[user.id].profiles.push(user.locale);
|
|
}
|
|
}
|
|
|
|
return res.json(groupedUsers);
|
|
});
|
|
|
|
export default router;
|