Files
Checkmate/Server/controllers/alertController.js
T

185 lines
4.4 KiB
JavaScript
Raw Normal View History

2024-05-28 11:34:25 -07:00
const logger = require("../utils/logger");
require("dotenv").config();
const {
createAlertParamValidation,
createAlertBodyValidation,
getAlertsByUserIdParamValidation,
getAlertsByMonitorIdParamValidation,
getAlertByIdParamValidation,
editAlertParamValidation,
editAlertBodyValidation,
deleteAlertParamValidation,
} = require("../validation/joi");
const { successMessages } = require("../utils/messages");
2024-05-28 11:34:25 -07:00
const SERVICE_NAME = "alerts";
/**
* Creates an alert for a monitor
* @async
* @param {Express.Request} req
* @param {Express.Response} res
* @returns {Promise<Express.Response>}
* @throws {Error}
*/
2024-05-28 11:39:55 -07:00
const createAlert = async (req, res, next) => {
try {
await createAlertParamValidation.validateAsync(req.params);
await createAlertBodyValidation.validateAsync(req.body);
} catch (error) {
error.status = 422;
error.message = error.details[0].message;
error.service = SERVICE_NAME;
next(error);
return;
}
try {
2024-05-29 12:12:56 -07:00
const alertData = { ...req.body };
const alert = await req.db.createAlert(alertData);
return res
.status(200)
.json({ success: true, msg: successMessages.ALERT_CREATE, data: alert });
2024-05-28 11:39:55 -07:00
} catch (error) {
error.service = SERVICE_NAME;
next(error);
}
2024-05-28 11:34:25 -07:00
};
/**
* Gets all alerts for a user
* @async
* @param {Express.Request} req
* @param {Express.Response} res
* @returns {Promise<Express.Response>}
* @throws {Error}
*/
const getAlertsByUserId = async (req, res, next) => {
try {
await getAlertsByUserIdParamValidation.validateAsync(req.params);
} catch (error) {
error.status = 422;
error.message = error.details[0].message;
error.service = SERVICE_NAME;
next(error);
return;
}
try {
2024-05-29 12:12:56 -07:00
const alerts = await req.db.getAlertsByUserId(req.params.userId);
return res.status(200).json({
success: true,
msg: successMessages.ALERT_GET_BY_USER,
data: alerts,
});
} catch (error) {
error.service = SERVICE_NAME;
next(error);
}
2024-05-28 11:34:25 -07:00
};
const getAlertsByMonitorId = async (req, res, next) => {
try {
await getAlertsByMonitorIdParamValidation.validateAsync(req.params);
} catch (error) {
error.status = 422;
error.message = error.details[0].message;
error.service = SERVICE_NAME;
next(error);
return;
}
2024-05-29 12:12:56 -07:00
try {
const alerts = await req.db.getAlertsByMonitorId(req.params.monitorId);
return res.status(200).json({
success: true,
msg: successMessages.ALERT_GET_BY_MONITOR,
2024-05-29 12:12:56 -07:00
data: alerts,
});
} catch (error) {
error.service = SERVICE_NAME;
next(error);
}
2024-05-28 11:34:25 -07:00
};
2024-05-29 12:12:56 -07:00
const getAlertById = async (req, res, next) => {
try {
await getAlertByIdParamValidation.validateAsync(req.params);
} catch (error) {
error.status = 422;
error.message = error.details[0].message;
error.service = SERVICE_NAME;
next(error);
return;
}
2024-05-29 12:12:56 -07:00
try {
const alert = await req.db.getAlertById(req.params.alertId);
return res.status(200).json({
success: true,
msg: successMessages.ALERT_GET_BY_ID,
2024-05-29 12:12:56 -07:00
data: alert,
});
} catch (error) {
error.service = SERVICE_NAME;
next(error);
}
2024-05-28 11:34:25 -07:00
};
2024-05-29 12:12:56 -07:00
const editAlert = async (req, res, next) => {
try {
2024-05-29 12:12:56 -07:00
await editAlertParamValidation.validateAsync(req.params);
await editAlertBodyValidation.validateAsync(req.body);
} catch (error) {
2024-05-29 12:12:56 -07:00
console.log(error);
error.status = 422;
error.message = error.details[0].message;
error.service = SERVICE_NAME;
next(error);
return;
}
2024-05-29 12:12:56 -07:00
try {
const alertData = { ...req.body };
const alert = await req.db.editAlert(req.params.alertId, alertData);
return res.status(200).json({
success: true,
msg: successMessages.ALERT_EDIT,
2024-05-29 12:12:56 -07:00
data: alert,
});
} catch (error) {
error.service = SERVICE_NAME;
next(error);
}
2024-05-28 11:34:25 -07:00
};
const deleteAlert = async (req, res, next) => {
try {
2024-05-29 12:12:56 -07:00
await deleteAlertParamValidation.validateAsync(req.params);
} catch (error) {
error.status = 422;
error.message = error.details[0].message;
error.service = SERVICE_NAME;
next(error);
return;
}
2024-05-29 12:12:56 -07:00
try {
const deleted = await req.db.deleteAlert(req.params.alertId);
return res.status(200).json({
success: true,
msg: successMessages.ALERT_DELETE,
2024-05-29 12:12:56 -07:00
data: deleted,
});
} catch (error) {
error.service = SERVICE_NAME;
next(error);
}
2024-05-28 11:34:25 -07:00
};
2024-05-28 11:17:03 -07:00
module.exports = {
createAlert,
getAlertsByUserId,
getAlertsByMonitorId,
getAlertById,
editAlert,
deleteAlert,
};