From 879d2337b6e2eedcc0d5e71896b582ac40ded7af Mon Sep 17 00:00:00 2001 From: Alex Holliday Date: Wed, 29 May 2024 12:12:56 -0700 Subject: [PATCH 1/2] Added alert DB operations --- Server/controllers/alertController.js | 84 +++++++++++++++++----- Server/db/MongoDB.js | 100 +++++++++++++------------- 2 files changed, 117 insertions(+), 67 deletions(-) diff --git a/Server/controllers/alertController.js b/Server/controllers/alertController.js index 91bb56971..f0c3df5dd 100644 --- a/Server/controllers/alertController.js +++ b/Server/controllers/alertController.js @@ -11,6 +11,7 @@ const { editAlertBodyValidation, deleteAlertParamValidation, } = require("../validation/joi"); +const { get } = require("mongoose"); const SERVICE_NAME = "alerts"; @@ -35,7 +36,11 @@ const createAlert = async (req, res, next) => { } try { - req.db.createAlert(req, res); + const alertData = { ...req.body }; + const alert = await req.db.createAlert(alertData); + return res + .status(200) + .json({ success: true, msg: "Alert created", data: alert }); } catch (error) { error.service = SERVICE_NAME; next(error); @@ -62,7 +67,10 @@ const getAlertsByUserId = async (req, res, next) => { } try { - req.db.getAlertsByUserId(req, res); + const alerts = await req.db.getAlertsByUserId(req.params.userId); + return res + .status(200) + .json({ success: true, msg: "Got alerts", data: alerts }); } catch (error) { error.service = SERVICE_NAME; next(error); @@ -72,29 +80,30 @@ const getAlertsByUserId = async (req, res, next) => { const getAlertsByMonitorId = async (req, res, next) => { try { await getAlertsByMonitorIdParamValidation.validateAsync(req.params); - res.status(200).json({ - success: true, - msg: "Get Alerts By MonitorID", - data: req.params.monitorId, - }); } catch (error) { error.status = 422; - res.status(200).json({ success: true, msg: "Edit alert" }); - error.message = error.details[0].message; error.service = SERVICE_NAME; next(error); return; } + + try { + const alerts = await req.db.getAlertsByMonitorId(req.params.monitorId); + return res.status(200).json({ + success: true, + msg: "Got alerts by Monitor", + data: alerts, + }); + } catch (error) { + error.service = SERVICE_NAME; + next(error); + } }; + const getAlertById = async (req, res, next) => { try { await getAlertByIdParamValidation.validateAsync(req.params); - res.status(200).json({ - success: true, - msg: "Get Alert By alertID", - data: req.params.alertId, - }); } catch (error) { error.status = 422; error.message = error.details[0].message; @@ -102,24 +111,49 @@ const getAlertById = async (req, res, next) => { next(error); return; } + + try { + const alert = await req.db.getAlertById(req.params.alertId); + return res.status(200).json({ + success: true, + msg: "Got Alert By alertID", + data: alert, + }); + } catch (error) { + error.service = SERVICE_NAME; + next(error); + } }; + const editAlert = async (req, res, next) => { try { - await editAlertParamValidation(req.params); - await editAlertBodyValidation(req.body); - res.status(200).json({ success: true, msg: "Edit alert" }); + await editAlertParamValidation.validateAsync(req.params); + await editAlertBodyValidation.validateAsync(req.body); } catch (error) { + console.log(error); error.status = 422; error.message = error.details[0].message; error.service = SERVICE_NAME; next(error); return; } + + try { + const alertData = { ...req.body }; + const alert = await req.db.editAlert(req.params.alertId, alertData); + return res.status(200).json({ + success: true, + msg: "Edited alert", + data: alert, + }); + } catch (error) { + error.service = SERVICE_NAME; + next(error); + } }; const deleteAlert = async (req, res, next) => { try { - await deleteAlertParamValidation(req.params); - res.status(200).json({ success: true, msg: "Delete alert" }); + await deleteAlertParamValidation.validateAsync(req.params); } catch (error) { error.status = 422; error.message = error.details[0].message; @@ -127,6 +161,18 @@ const deleteAlert = async (req, res, next) => { next(error); return; } + + try { + const deleted = await req.db.deleteAlert(req.params.alertId); + return res.status(200).json({ + success: true, + msg: "Deleted alert", + data: deleted, + }); + } catch (error) { + error.service = SERVICE_NAME; + next(error); + } }; module.exports = { diff --git a/Server/db/MongoDB.js b/Server/db/MongoDB.js index cc73f060d..f8ea2bead 100644 --- a/Server/db/MongoDB.js +++ b/Server/db/MongoDB.js @@ -2,6 +2,7 @@ const Monitor = require("../models/Monitor"); const mongoose = require("mongoose"); const UserModel = require("../models/user"); const Check = require("../models/Check"); +const Alert = require("../models/Alert"); const verifyId = (userId, monitorId) => { return userId.toString() === monitorId.toString(); @@ -60,10 +61,6 @@ const getUserByEmail = async (req, res) => { } }; -//**************************************** -// Monitors -//**************************************** - /** * Update a user by ID * @async @@ -89,6 +86,10 @@ const updateUser = async (req, res) => { } }; +//**************************************** +// Monitors +//**************************************** + /** * Get all monitors * @async @@ -222,6 +223,7 @@ const editMonitor = async (req, res) => { const createCheck = async (checkData) => { try { + console.log(checkData); const check = await new Check({ ...checkData }).save(); return check; } catch (error) { @@ -274,16 +276,21 @@ const deleteChecks = async (monitorId) => { /** * Creates an Alert associated with a Monitor and User * @async - * @param {Express.Request} req - * @param {Express.Response} res + * @param {Object} alertData + * @param {string} alertData.checkId + * @param {string} alert.monitorId + * @param {string} alert.userId + * @param {boolean} alert.status + * @param {string} alert.message + * @param {boolean} alert.notifiedStatus + * @param {boolean} alert.acknowledgeStatus * @returns {>} * @throws {Error} */ -const createAlert = async (req, res) => { +const createAlert = async (alertData) => { try { - res - .status(200) - .json({ success: true, msg: "Create Alert", data: req.params.monitorId }); + const alert = await new Alert({ ...alertData }).save(); + return alert; } catch (error) { throw error; } @@ -292,18 +299,14 @@ const createAlert = async (req, res) => { /** * Gets all alerts a User has set * @async - * @param {Express.Request} req - * @param {Express.Response} res + * @param {string} userId * @returns {>} * @throws {Error} */ -const getAlertsByUserId = async (req, res) => { +const getAlertsByUserId = async (userId) => { try { - res.status(200).json({ - success: true, - msg: "Get Alerts By UserID", - data: req.params.userId, - }); + const alerts = await Alert.find({ userId }); + return alerts; } catch (error) { throw error; } @@ -312,73 +315,74 @@ const getAlertsByUserId = async (req, res) => { /** * Gets all alerts a for an associated Monitor * @async - * @param {Express.Request} req - * @param {Express.Response} res + * @param {string} monitorId * @returns {>} * @throws {Error} */ -const getAlertsByMonitorId = async (req, res) => { +const getAlertsByMonitorId = async (monitorId) => { try { - res.status(200).json({ - success: true, - msg: "Get Alerts By MonitorID", - data: req.params.monitorId, - }); + const alerts = await Alert.find({ monitorId }); + return alerts; } catch (error) { throw error; } }; /** - * Gets an alert with specified ID + * Returns an alert with specified ID * @async - * @param {Express.Request} req - * @param {Express.Response} res + * @param {string} alertId * @returns {Promise} * @throws {Error} */ -const getAlertById = async (req, res) => { +const getAlertById = async (alertId) => { try { - res.status(200).json({ - success: true, - msg: "Get Alert By alertID", - data: req.params.alertId, - }); + const alert = await Alert.findById(alertId); + return alert; } catch (error) { throw error; } }; /** - * Returns an edited monitor with the specified ID + * Returns an edited alert with the specified ID * @async - * @param {Express.Request} req + * @param {string} alertId + * @param {Object} alertData + * @param {string} alertData.checkId + * @param {string} alertData.monitorId + * @param {string} alertData.userId + * @param {boolean} alertData.status + * @param {string} alertData.message + * @param {boolean} alertData.notifiedStatus + * @param {boolean} alertData.acknowledgeStatus * @param {Express.Response} res * @returns {Promise>} * @throws {Error} */ -const editAlert = async (req, res) => { +const editAlert = async (alertId, alertData) => { try { - res - .status(200) - .json({ success: true, msg: "Edit alert", data: req.params.alertId }); + const editedAlert = await Alert.findByIdAndUpdate(alertId, alertData, { + new: true, + }); + return editedAlert; } catch (error) { throw error; } }; /** - * Deletes a monitor with the specified ID + * Deletes an alert with the specified ID * @async - * @param {Express.Request} req - * @param {Express.Response} res + * @param {string} alertId * @throws {Error} */ -const deleteAlert = async (req, res) => { +const deleteAlert = async (alertId) => { try { - res - .status(200) - .json({ success: true, msg: "Delete alert", data: req.params.alertId }); + const result = await Alert.findByIdAndDelete(alertId); + if (result) { + return result; + } else throw new Error(`Alert with id ${alertId} not found`); } catch (error) { throw error; } From c6f0fcb13a1eec7ae2d22b0c4ff49cec3e6b5389 Mon Sep 17 00:00:00 2001 From: Alex Holliday Date: Wed, 29 May 2024 12:30:13 -0700 Subject: [PATCH 2/2] Updated documentation --- README.md | 160 ++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 142 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 80c950307..ff5190652 100644 --- a/README.md +++ b/README.md @@ -823,6 +823,24 @@ curl --request POST \ ###### Body + "checkId": "66577a3fd16dcf7c1ce35148", + "monitorId": "6657789ebf6766ee8e2d2edb", + "userId": "6654d1a2634754f789e1f115", + "status": false, + "message": "This is a test alert", + "notifiedStatus": "false", + "acknowledgeStatus": false + +> | Name | Type | Notes | +> | ----------------- | --------- | --------------------------------------- | +> | checkId | `string` | Id of `Check` associated with `Alert` | +> | monitorId | `string` | Id of `Monitor` associated with `Alert` | +> | userId | `string` | Id of `User` associated with `Alert` | +> | status | `boolean` | Status of `Alert` | +> | message | `string` | `Alert` message | +> | notifiedStatus | `boolean` | | +> | acknowledgeStatus | `boolean` | | + ##### Sample CURL request ``` @@ -855,13 +873,33 @@ curl --request POST \ ##### Sample CURL request ``` - +curl --request GET \ + --url http://localhost:5000/api/v1/alerts/user/6654d1a2634754f789e1f115 \ + --header 'Authorization: ' ``` ###### Sample Response ```json - +{ + "success": true, + "msg": "Got alerts", + "data": [ + { + "_id": "6657813d809adfded891a6b7", + "checkId": "66577a3fd16dcf7c1ce35148", + "monitorId": "6657789ebf6766ee8e2d2edb", + "userId": "6654d1a2634754f789e1f115", + "status": false, + "message": "This is a test alert", + "notifiedStatus": false, + "acknowledgeStatus": false, + "createdAt": "2024-05-29T19:25:49.317Z", + "updatedAt": "2024-05-29T19:25:49.317Z", + "__v": 0 + } + ] +} ``` @@ -883,13 +921,33 @@ curl --request POST \ ##### Sample CURL request ``` - +curl --request GET \ + --url http://localhost:5000/api/v1/alerts/monitor/6657789ebf6766ee8e2d2edb \ + --header 'Authorization: ' \ ``` ###### Sample Response ```json - +{ + "success": true, + "msg": "Got alerts by Monitor", + "data": [ + { + "_id": "6657813d809adfded891a6b7", + "checkId": "66577a3fd16dcf7c1ce35148", + "monitorId": "6657789ebf6766ee8e2d2edb", + "userId": "6654d1a2634754f789e1f115", + "status": false, + "message": "This is a test alert", + "notifiedStatus": false, + "acknowledgeStatus": false, + "createdAt": "2024-05-29T19:25:49.317Z", + "updatedAt": "2024-05-29T19:25:49.317Z", + "__v": 0 + } + ] +} ``` @@ -912,13 +970,31 @@ curl --request POST \ ##### Sample CURL request ``` - +curl --request GET \ + --url http://localhost:5000/api/v1/alerts/66577ddae5ff3c91437d0887 \ + --header 'Authorization: ' \ ``` ###### Sample Response ```json - +{ + "success": true, + "msg": "Got Alert By alertID", + "data": { + "_id": "66577ddae5ff3c91437d0887", + "checkId": "66577a3fd16dcf7c1ce35148", + "monitorId": "6657789ebf6766ee8e2d2edb", + "userId": "6654d1a2634754f789e1f115", + "status": false, + "message": "This is a test alert", + "notifiedStatus": false, + "acknowledgeStatus": false, + "createdAt": "2024-05-29T19:11:22.205Z", + "updatedAt": "2024-05-29T19:11:22.205Z", + "__v": 0 + } +} ``` @@ -934,22 +1010,54 @@ curl --request POST \ ###### Response Payload -> | Type | Notes | -> | ------- | -------------------- | -> | `Alert` | Returns edited alert | +> | Type | Notes | +> | ------- | ---------------------- | +> | `Alert` | Returns edited `Alert` | ###### Body +> | Name | Type | Notes | +> | ----------------- | --------- | ------------------------------------------ | +> | checkId | `string` | ID of `Check` associated with `Alert` | +> | monitorId | `string` | ID of `Monitor` id associated with `Alert` | +> | userId | `string` | ID of `User` associated with `Alert` | +> | status | `boolean` | Alert status | +> | message | `string` | Alert message | +> | notifiedStatus | `boolean` | | +> | acknowledgeStatus | `boolean` | | + ##### Sample CURL request ``` - +curl --request POST \ + --url http://localhost:5000/api/v1/alerts/edit/66577ddae5ff3c91437d0887 \ + --header 'Authorization: ' \ + --header 'Content-Type: application/json' \ + --data '{ + "acknowledgeStatus": true +}' ``` ###### Sample Response ```json - +{ + "success": true, + "msg": "Edited alert", + "data": { + "_id": "66577ddae5ff3c91437d0887", + "checkId": "66577a3fd16dcf7c1ce35148", + "monitorId": "6657789ebf6766ee8e2d2edb", + "userId": "6654d1a2634754f789e1f115", + "status": false, + "message": "This is a test alert", + "notifiedStatus": false, + "acknowledgeStatus": true, + "createdAt": "2024-05-29T19:11:22.205Z", + "updatedAt": "2024-05-29T19:12:23.951Z", + "__v": 0 + } +} ``` @@ -964,22 +1072,38 @@ curl --request POST \ ###### Response Payload -> | Type | Notes | -> | ---- | ------------------- | -> | None | No payload returned | - -###### Body +> | Type | Notes | +> | ------- | --------------------------- | +> | `Alert` | Returns the deleted `Alert` | ##### Sample CURL request ``` - +curl --request POST \ + --url http://localhost:5000/api/v1/alerts/delete/66577ddae5ff3c91437d0887 \ + --header 'Authorization: ' \ ``` ###### Sample Response ```json - +{ + "success": true, + "msg": "Deleted alert", + "data": { + "_id": "66577ddae5ff3c91437d0887", + "checkId": "66577a3fd16dcf7c1ce35148", + "monitorId": "6657789ebf6766ee8e2d2edb", + "userId": "6654d1a2634754f789e1f115", + "status": false, + "message": "This is a test alert", + "notifiedStatus": false, + "acknowledgeStatus": true, + "createdAt": "2024-05-29T19:11:22.205Z", + "updatedAt": "2024-05-29T19:12:23.951Z", + "__v": 0 + } +} ```