From 177fcfbe5cb672e25593b9f87cea083e59970cd6 Mon Sep 17 00:00:00 2001 From: Hannah McGowan <73210740+hannahmcg@users.noreply.github.com> Date: Thu, 30 May 2024 13:31:44 -0700 Subject: [PATCH] fix(Projects): improve getUserProjectsAdmin (#294) * fix(Projects): improve getUserProjectsAdmin by using try catch * fixes to syntax and add centralID param to request validator * fix(Projects): fix getUserProjectsAdmin validator --------- Co-authored-by: jakeaturner --- server/api/projects.js | 124 +++++++++++++++++++++-------------------- 1 file changed, 65 insertions(+), 59 deletions(-) diff --git a/server/api/projects.js b/server/api/projects.js index 95208e4f..d59dc271 100644 --- a/server/api/projects.js +++ b/server/api/projects.js @@ -948,72 +948,77 @@ const getUserProjects = (req, res) => { * @param {Object} req - The Express.js request object. * @param {Object} res - The Express.js response object. */ -const getUserProjectsAdmin = (req, res) => { - Project.aggregate([ - { - $match: { - $and: [ - { - $or: constructProjectTeamMemberQuery(req.query.uuid), - }, - { - status: { - $ne: "completed", +async function getUserProjectsAdmin(req, res) { + try { + let userid = req.query.uuid; + const centralID = req.query.centralID; + if (centralID) { + const found = await User.findOne({centralID: req.query.uuid}).orFail(); + userid = found.uuid; + }; + const projects = await Project.aggregate([ + { + $match: { + $and: [ + { + $or: constructProjectTeamMemberQuery(userid), }, - }, - ], - }, - }, - { - $lookup: { - from: "users", - let: { - leads: "$leads", - }, - pipeline: [ - { - $match: { - $expr: { - $in: ["$uuid", "$$leads"], + { + status: { + $ne: "completed", }, }, + ], + }, + }, + { + $lookup: { + from: "users", + let: { + leads: "$leads", }, - { - $project: { - _id: 0, - uuid: 1, - firstName: 1, - lastName: 1, - avatar: 1, + pipeline: [ + { + $match: { + $expr: { + $in: ["$uuid", "$$leads"], + }, + }, }, - }, - ], - as: "leads", + { + $project: { + _id: 0, + uuid: 1, + firstName: 1, + lastName: 1, + avatar: 1, + }, + }, + ], + as: "leads", + }, }, - }, - { - $sort: { - title: -1, + { + $sort: { + title: -1, + }, }, - }, - { - $project: projectListingProjection, - }, - ]) - .then((projects) => { - return res.send({ - err: false, - uuid: req.query.uuid, - projects: projects, - }); - }) - .catch((err) => { - debugError(err); - return res.send({ - err: false, - errMsg: conductorErrors.err6, - }); + { + $project: projectListingProjection, + }, + ]); + return res.send({ + err: false, + uuid: userid, + projects: projects, + }); + } catch (err) { + debugError(err); + return res.send({ + err: false, + errMsg: conductorErrors.err6, }); + } }; @@ -3419,7 +3424,8 @@ const validate = (method) => { ] case 'getUserProjectsAdmin': return [ - query('uuid', conductorErrors.err1).exists().isString().isUUID() + query('uuid', conductorErrors.err1).exists().isString().isUUID(), + query('centralID', conductorErrors.err1).optional({checkFalsy: true}).isBoolean().toBoolean() ] case 'addMemberToProject': return [