implemented DB operations for Checks

This commit is contained in:
Alex Holliday committed 2024-05-29 10:59:29 -07:00
1 parent acc8f6a1e5
commit 6437e8e9bf
3 files changed
+127 -41

No files matched your search

+53 -9
View File
@@ -1,29 +1,73 @@
var jwt = require("jsonwebtoken");
const {
createCheckParamValidation,
createCheckBodyValidation,
getChecksParamValidation,
deleteChecksParamValidation,
} = require("../validation/joi");
const SERVICE_NAME = "check";
const createCheck = (req, res, next) => {
const createCheck = async (req, res, next) => {
try {
req.db.createCheck(req, res);
await createCheckParamValidation.validateAsync(req.params);
await createCheckBodyValidation.validateAsync(req.body);
} catch (error) {
error.status = 422;
error.service = SERVICE_NAME;
error.message = error.details[0].message;
next(error);
return;
}
try {
const checkData = { ...req.body };
const check = await req.db.createCheck(checkData);
return res
.status(200)
.json({ success: true, msg: "Check created", data: check });
} catch (error) {
error.service = SERVICE_NAME;
next(error);
}
};
const getChecks = (req, res, next) => {
const getChecks = async (req, res, next) => {
try {
req.db.getChecks(req, res);
// Return all checks for a monitor
await getChecksParamValidation.validateAsync(req.params);
} catch (error) {
error.status = 422;
error.service = SERVICE_NAME;
error.message = error.details[0].message;
next(error);
return;
}
try {
const checks = await req.db.getChecks(req.params.monitorId);
return res
.status(200)
.json({ success: true, msg: "Checks retrieved", data: checks });
} catch (error) {
error.service = SERVICE_NAME;
next(error);
}
};
const deleteChecks = (req, res, next) => {
const deleteChecks = async (req, res, next) => {
try {
req.db.deleteChecks(req, res);
// Delete all checks for a monitor
await deleteChecksParamValidation.validateAsync(req.params);
} catch (error) {
error.status = 422;
error.service = SERVICE_NAME;
error.message = error.details[0].message;
next(error);
return;
}
try {
const deletedCount = await req.db.deleteChecks(req.params.monitorId);
return res
.status(200)
.json({ success: true, msg: "Checks deleted", data: { deletedCount } });
} catch (error) {
error.service = SERVICE_NAME;
next(error);
+25 -23
View File
@@ -1,6 +1,7 @@
const Monitor = require("../models/Monitor");
const mongoose = require("mongoose");
const UserModel = require("../models/user");
const Check = require("../models/Check");
const verifyId = (userId, monitorId) => {
return userId.toString() === monitorId.toString();
@@ -209,17 +210,20 @@ const editMonitor = async (req, res) => {
/**
* Create a check for a monitor
* @async
* @param {Express.Request} req
* @param {Express.Response} res
* @param {Object} checkData
* @param {string} checkData.monitorId
* @param {boolean} checkData.status
* @param {number} checkData.responseTime
* @param {number} checkData.statusCode
* @param {string} checkData.message
* @returns {Promise<Check>}
* @throws {Error}
*/
const createCheck = async (req, res) => {
const createCheck = async (checkData) => {
try {
// Create check with monitor id
res
.status(200)
.json({ success: true, msg: "Create check", data: req.params.monitorId });
const check = await new Check({ ...checkData }).save();
return check;
} catch (error) {
throw error;
}
@@ -228,17 +232,15 @@ const createCheck = async (req, res) => {
/**
* Get all checks for a monitor
* @async
* @param {Express.Request} req
* @param {Express.Response} res
* @param {string} monitorId
* @returns {Promise<Array<Check>>}
* @throws {Error}
*/
const getChecks = async (req, res) => {
const getChecks = async (monitorId) => {
try {
// TODO get all checks for a monitor from DB
res
.status(200)
.json({ success: true, msg: "Get checks", data: req.params.monitorId });
const checks = await Check.find({ monitorId });
return checks;
} catch (error) {
throw error;
}
@@ -247,19 +249,19 @@ const getChecks = async (req, res) => {
/**
* Delete all checks for a monitor
* @async
* @param {Express.Request} req
* @param {Express.Response} res
* @param {string} monitorId
* @returns {boolean}
* @throws {Error}
*/
const deleteChecks = async (req, res) => {
const deleteChecks = async (monitorId) => {
try {
// TODO Delete all checks for a monitor
res.status(200).json({
success: true,
msg: "Deleted checks",
data: req.params.monitorId,
});
const result = await Check.deleteMany({ monitorId });
if (result.deletedCount > 0) {
return result.deletedCount;
} else {
throw new Error(`No checks found for monitor with id ${monitorId}`);
}
} catch (error) {
throw error;
}
+49 -9
View File
@@ -1,5 +1,9 @@
const joi = require("joi");
//****************************************
// Auth
//****************************************
const loginValidation = joi.object({
email: joi.string().email().required(),
password: joi.string().min(8).required(),
@@ -11,6 +15,20 @@ const registerValidation = joi.object({
password: joi.string().min(8).required(),
});
const editUserParamValidation = joi.object({
userId: joi.string().required(),
});
const editUserBodyValidation = joi.object({
firstname: joi.string(),
lastname: joi.string(),
profilePicUrl: joi.string(),
});
//****************************************
// Monitors
//****************************************
const getMonitorByIdValidation = joi.object({
monitorId: joi.string().required(),
});
@@ -29,15 +47,9 @@ const monitorValidation = joi.object({
interval: joi.number(),
});
const editUserParamValidation = joi.object({
userId: joi.string().required(),
});
const editUserBodyValidation = joi.object({
firstname: joi.string(),
lastname: joi.string(),
profilePicUrl: joi.string(),
});
//****************************************
// Alerts
//****************************************
const createAlertParamValidation = joi.object({
monitorId: joi.string().required(),
@@ -80,6 +92,30 @@ const deleteAlertParamValidation = joi.object({
alertId: joi.string().required(),
});
//****************************************
// Checks
//****************************************
const createCheckParamValidation = joi.object({
monitorId: joi.string().required(),
});
const createCheckBodyValidation = joi.object({
monitorId: joi.string().required(),
status: joi.boolean().required(),
responseTime: joi.number().required(),
statusCode: joi.number().required(),
message: joi.string().required(),
});
const getChecksParamValidation = joi.object({
monitorId: joi.string().required(),
});
const deleteChecksParamValidation = joi.object({
monitorId: joi.string().required(),
});
module.exports = {
loginValidation,
registerValidation,
@@ -96,4 +132,8 @@ module.exports = {
editAlertParamValidation,
editAlertBodyValidation,
deleteAlertParamValidation,
createCheckParamValidation,
createCheckBodyValidation,
getChecksParamValidation,
deleteChecksParamValidation,
};