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