CentralBackend/controller/matrix/MatrixController.js
2025-11-17 22:11:28 +01:00

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
};