From 879d2337b6e2eedcc0d5e71896b582ac40ded7af Mon Sep 17 00:00:00 2001 From: Alex Holliday Date: Wed, 29 May 2024 12:12:56 -0700 Subject: [PATCH] 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; }