diff --git a/Server/controllers/monitorController.js b/Server/controllers/monitorController.js index 4e51aca97..45a55a973 100644 --- a/Server/controllers/monitorController.js +++ b/Server/controllers/monitorController.js @@ -98,15 +98,54 @@ const getMonitorsByUserId = async (req, res, next) => { } }; +/** + * Returns monitor with matching ID and incidents + * @async + * @param {Express.Request} req + * @param {Express.Response} res + * @returns {Promise} + * @throws {Error} + */ const getMonitorByIdForIncidents = async (req, res, next) => { try { + await getMonitorByIdValidation.validateAsync(req.params); + + let monitorWithIncidents = await req.db.getMonitorByIdForIncidents( + req, + res + ); + + return res.json({ + success: true, + msg: successMessages.MONTIOR_GET_BY_ID, + data: monitorWithIncidents, + }); } catch (error) { error.service = SERVICE_NAME; next(error); } }; + +/** + * Returns all monitors with incidents that belong to User with UserID + * @async + * @param {Express.Request} req + * @param {Express.Response} res + * @returns {Promise} + * @throws {Error} + */ const getMonitorsByUserIdForIncidents = async (req, res, next) => { try { + await getMonitorsByUserIdValidation.validateAsync(req.params); + let monitorsWithIncidents = await req.db.getMonitorsByUserIdForIncidents( + req, + res + ); + return res.json({ + success: true, + msg: successMessages.MONITOR_GET_BY_USER_ID(req.params.userId), + data: monitorsWithIncidents, + }); } catch (error) { error.service = SERVICE_NAME; next(error); @@ -242,6 +281,8 @@ module.exports = { getAllMonitors, getMonitorById, getMonitorsByUserId, + getMonitorByIdForIncidents, + getMonitorsByUserIdForIncidents, createMonitor, deleteMonitor, deleteAllMonitors, diff --git a/Server/db/MongoDB.js b/Server/db/MongoDB.js index 86160b91c..644d446ac 100644 --- a/Server/db/MongoDB.js +++ b/Server/db/MongoDB.js @@ -131,7 +131,6 @@ const updateUser = async (req, res) => { ) .select("-password") .select("-profileImage"); - console.log(updatedUser); return updatedUser; } catch (error) { throw error; @@ -346,7 +345,21 @@ const getMonitorsByUserId = async (req, res) => { * @returns {Promise} * @throws {Error} */ -const getMonitorByIdForIncidents = async (req, res, next) => {}; +const getMonitorByIdForIncidents = async (req, res, next) => { + try { + const monitor = await Monitor.findById(req.params.monitorId); + const checks = await Check.find({ + monitorId: monitor._id, + status: false, + }).sort({ + createdAt: 1, + }); + const monitorWithChecks = { ...monitor.toObject(), checks }; + return monitorWithChecks; + } catch (error) { + throw error; + } +}; /** * Get monitors by UserID @@ -356,7 +369,26 @@ const getMonitorByIdForIncidents = async (req, res, next) => {}; * @returns {Promise>} * @throws {Error} */ -const getMonitorsByUserIdForIncidents = async (req, res, next) => {}; +const getMonitorsByUserIdForIncidents = async (req, res) => { + try { + const monitors = await Monitor.find({ userId: req.params.userId }); + // Map each monitor to include its associated checks + const monitorsWithChecks = await Promise.all( + monitors.map(async (monitor) => { + const checks = await Check.find({ + monitorId: monitor._id, + status: false, + }).sort({ + createdAt: 1, + }); + return { ...monitor.toObject(), checks }; + }) + ); + return monitorsWithChecks; + } catch (error) { + throw error; + } +}; /** * Create a monitor @@ -468,7 +500,6 @@ const editMonitor = async (req, res) => { const createCheck = async (checkData) => { try { - console.log(checkData); const check = await new Check({ ...checkData }).save(); return check; } catch (error) { @@ -657,6 +688,8 @@ module.exports = { getAllMonitors, getMonitorById, getMonitorsByUserId, + getMonitorByIdForIncidents, + getMonitorsByUserIdForIncidents, createMonitor, deleteMonitor, deleteAllMonitors, diff --git a/Server/routes/monitorRoute.js b/Server/routes/monitorRoute.js index ae7a5852e..9ba703244 100644 --- a/Server/routes/monitorRoute.js +++ b/Server/routes/monitorRoute.js @@ -7,6 +7,15 @@ router.get("/", monitorController.getAllMonitors); router.get("/:monitorId", monitorController.getMonitorById); router.get("/user/:userId", monitorController.getMonitorsByUserId); +router.get( + "/incidents/:monitorId", + monitorController.getMonitorByIdForIncidents +); +router.get( + "/incidents/user/:userId", + monitorController.getMonitorsByUserIdForIncidents +); + router.post("/", monitorController.createMonitor); router.post( "/delete/:monitorId",