112 lines
3.1 KiB
JavaScript
112 lines
3.1 KiB
JavaScript
const MatrixService = require('../../services/matrix/MatrixService');
|
|
|
|
async function create(req, res) {
|
|
try {
|
|
const { name, email, force } = req.query; // email of the top node account
|
|
const result = await MatrixService.create({
|
|
name,
|
|
topNodeEmail: email,
|
|
force: String(force || '').toLowerCase() === 'true',
|
|
actorUser: req.user
|
|
});
|
|
return res.json({ success: true, data: result });
|
|
} catch (err) {
|
|
const status = err.status || 500;
|
|
return res.status(status).json({ success: false, message: err.message || 'Matrix creation failed' });
|
|
}
|
|
}
|
|
|
|
async function stats(req, res) {
|
|
try {
|
|
const data = await MatrixService.getStats({ actorUser: req.user });
|
|
return res.json({ success: true, data });
|
|
} catch (err) {
|
|
const status = err.status || 500;
|
|
return res.status(status).json({ success: false, message: err.message || 'Could not load matrix stats' });
|
|
}
|
|
}
|
|
|
|
// NEW: admin-only list of matrix users under a root
|
|
async function getMatrixUserforAdmin(req, res) {
|
|
try {
|
|
const { rootUserId, depth, limit, offset, includeRoot } = req.query;
|
|
// aliases accepted by backend for convenience
|
|
const matrixId = req.query.matrixId || req.query.id;
|
|
const topNodeEmail = req.query.topNodeEmail || req.query.email;
|
|
|
|
const data = await MatrixService.getUsers({
|
|
rootUserId,
|
|
maxDepth: depth,
|
|
limit,
|
|
offset,
|
|
includeRoot,
|
|
actorUser: req.user,
|
|
matrixId,
|
|
topNodeEmail
|
|
});
|
|
return res.json({ success: true, data });
|
|
} catch (err) {
|
|
const status = err.status || 500;
|
|
return res.status(status).json({ success: false, message: err.message || 'Could not load matrix users' });
|
|
}
|
|
}
|
|
|
|
// NEW: admin-only search of user candidates to add into a matrix
|
|
async function searchCandidates(req, res) {
|
|
try {
|
|
const { q, type, limit, offset, rootUserId } = req.query;
|
|
const matrixId = req.query.matrixId || req.query.id;
|
|
const topNodeEmail = req.query.topNodeEmail || req.query.email;
|
|
|
|
const data = await MatrixService.getUserCandidates({
|
|
q,
|
|
type,
|
|
limit,
|
|
offset,
|
|
rootUserId,
|
|
matrixId,
|
|
topNodeEmail,
|
|
actorUser: req.user
|
|
});
|
|
|
|
return res.json({ success: true, data });
|
|
} catch (err) {
|
|
const status = err.status || 500;
|
|
return res.status(status).json({ success: false, message: err.message || 'Could not search user candidates' });
|
|
}
|
|
}
|
|
|
|
async function addUser(req, res) {
|
|
try {
|
|
const {
|
|
rootUserId,
|
|
matrixId,
|
|
topNodeEmail,
|
|
childUserId,
|
|
forceParentFallback,
|
|
parentUserId
|
|
} = req.body;
|
|
const data = await MatrixService.addUserToMatrix({
|
|
rootUserId,
|
|
matrixId,
|
|
topNodeEmail,
|
|
childUserId,
|
|
forceParentFallback,
|
|
parentUserId,
|
|
actorUser: req.user
|
|
});
|
|
return res.json({ success: true, data });
|
|
} catch (err) {
|
|
const status = err.status || 500;
|
|
return res.status(status).json({ success: false, message: err.message || 'Could not add user to matrix' });
|
|
}
|
|
}
|
|
|
|
module.exports = {
|
|
create,
|
|
stats,
|
|
getMatrixUserforAdmin,
|
|
searchCandidates,
|
|
addUser // NEW
|
|
};
|