diff --git a/Server/controllers/checkController.js b/Server/controllers/checkController.js index 20c2e0b8c..2b4a08b3d 100644 --- a/Server/controllers/checkController.js +++ b/Server/controllers/checkController.js @@ -60,6 +60,20 @@ const getChecks = async (req, res, next) => { } }; +const getUserChecks = async (req, res, next) => { + try { + const checks = req.db.getUserChecks(req); + return res.status(200).json({ + success: true, + msg: successMessages.CHECK_GET, + data: { checksCount, checks }, + }); + } catch (error) { + error.service = SERVICE_NAME; + next(error); + } +}; + const deleteChecks = async (req, res, next) => { try { await deleteChecksParamValidation.validateAsync(req.params); @@ -88,5 +102,6 @@ const deleteChecks = async (req, res, next) => { module.exports = { createCheck, getChecks, + getUserChecks, deleteChecks, }; diff --git a/Server/db/mongo/MongoDB.js b/Server/db/mongo/MongoDB.js index 1dbc4e3b8..ed1b9e4b1 100644 --- a/Server/db/mongo/MongoDB.js +++ b/Server/db/mongo/MongoDB.js @@ -90,6 +90,7 @@ const { createCheck, getChecksCount, getChecks, + getUserChecks, deleteChecks, } = require("./modules/checkModule"); @@ -148,6 +149,7 @@ module.exports = { createCheck, getChecksCount, getChecks, + getUserChecks, deleteChecks, createAlert, getAlertsByUserId, diff --git a/Server/db/mongo/modules/checkModule.js b/Server/db/mongo/modules/checkModule.js index 4d315dc9a..f2322150a 100644 --- a/Server/db/mongo/modules/checkModule.js +++ b/Server/db/mongo/modules/checkModule.js @@ -1,4 +1,6 @@ const Check = require("../../../models/Check"); +const Monitor = require("../../../models/Monitor"); +const mongoose = require("mongoose"); const filterLookup = { day: new Date(new Date().setDate(new Date().getDate() - 1)), week: new Date(new Date().setDate(new Date().getDate() - 7)), @@ -92,6 +94,35 @@ const getChecks = async (req) => { * @throws {Error} */ +const getUserChecks = async (req) => { + const { userId } = req.params; + try { + const objectId = mongoose.Types.ObjectId.createFromHexString(userId); + + const checks = await Check.aggregate([ + { + $lookup: { + from: "monitors", // The name of the Monitor collection + localField: "monitorId", + foreignField: "_id", + as: "monitorDetails", + }, + }, + { + $unwind: "$monitorDetails", + }, + { + $match: { + "monitorDetails.userId": objectId, + }, + }, + ]); + return checks; + } catch (error) { + throw error; + } +}; + const deleteChecks = async (monitorId) => { try { const result = await Check.deleteMany({ monitorId }); @@ -100,4 +131,10 @@ const deleteChecks = async (monitorId) => { throw error; } }; -module.exports = { createCheck, getChecksCount, getChecks, deleteChecks }; +module.exports = { + createCheck, + getChecksCount, + getChecks, + getUserChecks, + deleteChecks, +}; diff --git a/Server/routes/checkRoute.js b/Server/routes/checkRoute.js index 0216343c8..bb06594ac 100644 --- a/Server/routes/checkRoute.js +++ b/Server/routes/checkRoute.js @@ -21,4 +21,6 @@ router.post( checkController.deleteChecks ); -module.exports = router; \ No newline at end of file +router.get("/user/:userId", checkController.getUserChecks); + +module.exports = router;