diff --git a/Server/controllers/monitorController.js b/Server/controllers/monitorController.js index 5e3899005..c22bf50c3 100644 --- a/Server/controllers/monitorController.js +++ b/Server/controllers/monitorController.js @@ -158,6 +158,7 @@ const deleteMonitor = async (req, res, next) => { await req.jobQueue.deleteJob(monitor); await req.db.deleteChecks(monitor._id); await req.db.deleteAlertByMonitorId(monitor._id); + await req.db.deleteNotificationByMonitorId(monitor._id); /** * TODO * We should remove all checks and alerts associated with this monitor diff --git a/Server/db/mongo/MongoDB.js b/Server/db/mongo/MongoDB.js index de2b3466e..2813a3c00 100644 --- a/Server/db/mongo/MongoDB.js +++ b/Server/db/mongo/MongoDB.js @@ -65,8 +65,6 @@ const { getAllMonitors, getMonitorById, getMonitorsByUserId, - getMonitorByIdForIncidents, - getMonitorsByUserIdForIncidents, createMonitor, deleteMonitor, deleteAllMonitors, @@ -120,6 +118,12 @@ const { deleteMaintenanceWindowByUserId, } = require("./modules/maintenaceWindowModule"); +const { + createNotification, + getNotificationsByMonitorId, + deleteNotificationsByMonitorId, +} = require("./modules/notificationModule"); + module.exports = { connect, insertUser, @@ -136,8 +140,6 @@ module.exports = { getAllMonitors, getMonitorById, getMonitorsByUserId, - getMonitorByIdForIncidents, - getMonitorsByUserIdForIncidents, createMonitor, deleteMonitor, deleteAllMonitors, @@ -162,4 +164,7 @@ module.exports = { deleteMaintenaceWindowById, deleteMaintenanceWindowByMonitorId, deleteMaintenanceWindowByUserId, + createNotification, + getNotificationsByMonitorId, + deleteNotificationsByMonitorId, }; diff --git a/Server/db/mongo/modules/notificationModule.js b/Server/db/mongo/modules/notificationModule.js new file mode 100644 index 000000000..f5c8708f4 --- /dev/null +++ b/Server/db/mongo/modules/notificationModule.js @@ -0,0 +1,50 @@ +const Notification = require("../../../models/Notification"); + +/** + * Creates a new notification. + * @param {Object} notificationData - The data for the new notification. + * @param {mongoose.Types.ObjectId} notificationData.monitorId - The ID of the monitor. + * @param {string} notificationData.type - The type of the notification (e.g., "email", "sms"). + * @param {string} [notificationData.address] - The address for the notification (if applicable). + * @param {string} [notificationData.phone] - The phone number for the notification (if applicable). + * @returns {Promise} The created notification. + * @throws Will throw an error if the notification cannot be created. + */ +const createNotification = async (notificationData) => { + try { + const notification = await new Notification({ ...notificationData }).save(); + return notification; + } catch (error) { + throw error; + } +}; + +/** + * Retrieves notifications by monitor ID. + * @param {mongoose.Types.ObjectId} monitorId - The ID of the monitor. + * @returns {Promise>} An array of notifications. + * @throws Will throw an error if the notifications cannot be retrieved. + */ +const getNotificationsByMonitorId = async (monitorId) => { + try { + const notifications = await Notification.find({ monitorId }); + return notifications; + } catch (error) { + throw error; + } +}; + +const deleteNotificationsByMonitorId = async (monitorId) => { + try { + const result = await Notification.deleteMany({ monitorId }); + return result.deletedCount; + } catch (error) { + throw error; + } +}; + +module.exports = { + createNotification, + getNotificationsByMonitorId, + deleteNotificationsByMonitorId, +};