42 lines
1.2 KiB
JavaScript
42 lines
1.2 KiB
JavaScript
|
import {renderJson} from "../src/helpers";
|
||
|
|
||
|
const dbConnection = require('./db');
|
||
|
const SQL = require('sql-template-strings');
|
||
|
import authenticate from './authenticate';
|
||
|
|
||
|
|
||
|
export default async function (req, res, next) {
|
||
|
const db = await dbConnection();
|
||
|
const user = authenticate(req);
|
||
|
|
||
|
if (!user || !user.authenticated || user.roles !== 'admin') {
|
||
|
return renderJson(res, {error: 'unauthorised'}, 401);
|
||
|
}
|
||
|
|
||
|
if (req.method === 'GET' && req.url === '/users') {
|
||
|
const users = await db.all(SQL`
|
||
|
SELECT u.id, u.username, u.email, u.roles, 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] : [],
|
||
|
}
|
||
|
} else {
|
||
|
groupedUsers[user.id].profiles.push(user.locale);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return renderJson(res, groupedUsers);
|
||
|
}
|
||
|
|
||
|
return renderJson(res, { error: 'notfound' }, 404);
|
||
|
}
|