diff --git a/Client/src/Components/DashboardMenu/index.css b/Client/src/Components/DashboardMenu/index.css
index 37c84655b..3c58afdb7 100644
--- a/Client/src/Components/DashboardMenu/index.css
+++ b/Client/src/Components/DashboardMenu/index.css
@@ -1,15 +1,20 @@
+.dashboard-menu-container {
+ display: flex;
+ flex-direction: column;
+ padding: 20px;
+}
+
.icon-container {
- display: flex;
- align-items: center;
- margin-bottom: 12px;
- }
-
- .text-container {
- display: flex;
- align-items: center;
- }
-
- .dashboard-menu-text {
- margin-left: 8px;
- }
-
\ No newline at end of file
+ display: flex;
+ align-items: center;
+ margin-bottom: 12px;
+}
+
+.text-container {
+ display: flex;
+ align-items: center;
+}
+
+.dashboard-menu-text {
+ margin-left: 8px;
+}
diff --git a/Client/src/Components/DashboardSidebar/index.css b/Client/src/Components/DashboardSidebar/index.css
new file mode 100644
index 000000000..43af36fbd
--- /dev/null
+++ b/Client/src/Components/DashboardSidebar/index.css
@@ -0,0 +1,31 @@
+.dashboard-sidebar {
+ height: 100vh;
+ width: 250px;
+ background-color: #f4f4f4;
+ box-shadow: 2px 0 5px rgba(0, 0, 0, 0.1);
+ position: fixed;
+ top: 0;
+ left: 0;
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+ padding: 20px 0;
+ }
+
+ .menu-container {
+ margin-top: 60px;
+ }
+
+ .support-container {
+ display: flex;
+ align-items: center;
+ padding: 10px 20px;
+ margin-bottom: 40px;
+ }
+
+ .support-text {
+ margin-left: 8px;
+ font-size: 16px;
+ color: #333;
+ }
+
\ No newline at end of file
diff --git a/Client/src/Components/DashboardSidebar/index.jsx b/Client/src/Components/DashboardSidebar/index.jsx
new file mode 100644
index 000000000..846452dbc
--- /dev/null
+++ b/Client/src/Components/DashboardSidebar/index.jsx
@@ -0,0 +1,27 @@
+import DashboardMenu from '../../Components/DashboardMenu';
+import SupportIcon from '@mui/icons-material/Support';
+import SvgIcon from '@mui/material/SvgIcon';
+import './index.css';
+
+/**
+ * @component
+ * DashboardSidebar component serves as a sidebar containing the DashboardMenu and a Support icon at the bottom.
+ *
+ * @returns {JSX.Element} The JSX element representing the DashboardSidebar component.
+ */
+
+function DashboardSidebar() {
+ return (
+
+ );
+}
+
+export default DashboardSidebar;
diff --git a/Client/src/Components/NavBar/index.jsx b/Client/src/Components/NavBar/index.jsx
index fa1a8bc15..2c255eae0 100644
--- a/Client/src/Components/NavBar/index.jsx
+++ b/Client/src/Components/NavBar/index.jsx
@@ -46,8 +46,8 @@ function NavBar() {
};
return (
-
-
+
+
{
- return (
- <>
-
-
-
-
-
- >
- )
+ return (
+
+ );
}
-export default HomeLayout
\ No newline at end of file
+export default HomeLayout;
diff --git a/README.md b/README.md
index dfc57064d..ff5190652 100644
--- a/README.md
+++ b/README.md
@@ -655,22 +655,54 @@ curl --request POST \
###### Response Payload
-> | Type | Notes |
-> | ---- | ------------------- |
-> | None | No payload returned |
+> | Type | Notes |
+> | ------- | --------------------------- |
+> | `Check` | Returns newly created check |
###### Body
+> | Name | Type | Notes |
+> | ------------ | --------- | -------------------------------------- |
+> | monitorId | `string` | Monitor associated with Check |
+> | status | `boolean` | `true` for up and `false` for down |
+> | responseTime | `number` | How long it took the server to respond |
+> | statusCode | `number` | HTTP Status code of response |
+> | message | `string` | |
+
##### Sample CURL request
```
-
+curl --request POST \
+ --url http://localhost:5000/api/v1/checks/66562414035c4ce6a8a610ac \
+ --header 'Authorization: ' \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "monitorId": "66562414035c4ce6a8a610ac",
+ "status": true,
+ "responseTime": 1,
+ "statusCode": 200,
+ "message": "good"
+}'
```
###### Sample Response
```json
-
+{
+ "success": true,
+ "msg": "Check created",
+ "data": {
+ "monitorId": "66562414035c4ce6a8a610ac",
+ "status": true,
+ "responseTime": 1,
+ "statusCode": 200,
+ "message": "good",
+ "_id": "66576decba9f70148ea1f354",
+ "createdAt": "2024-05-29T18:03:24.445Z",
+ "updatedAt": "2024-05-29T18:03:24.445Z",
+ "__v": 0
+ }
+}
```
@@ -682,7 +714,7 @@ curl --request POST \
> | Method/Headers | Value |
> | -------------- | ----- |
-> | Method | POST |
+> | Method | GET |
###### Response Payload
@@ -693,13 +725,42 @@ curl --request POST \
##### Sample CURL request
```
-
+curl --request GET \
+ --url http://localhost:5000/api/v1/checks/66562414035c4ce6a8a610ac \
+ --header 'Authorization: ' \
```
###### Sample Response
```json
-
+{
+ "success": true,
+ "msg": "Checks retrieved",
+ "data": [
+ {
+ "_id": "66576c0194e11c0d4409d3c1",
+ "monitorId": "66562414035c4ce6a8a610ac",
+ "status": true,
+ "responseTime": 1,
+ "statusCode": 200,
+ "message": "good",
+ "createdAt": "2024-05-29T17:55:13.581Z",
+ "updatedAt": "2024-05-29T17:55:13.581Z",
+ "__v": 0
+ },
+ {
+ "_id": "66576c0994e11c0d4409d3c5",
+ "monitorId": "66562414035c4ce6a8a610ac",
+ "status": true,
+ "responseTime": 2,
+ "statusCode": 200,
+ "message": "good",
+ "createdAt": "2024-05-29T17:55:21.127Z",
+ "updatedAt": "2024-05-29T17:55:21.127Z",
+ "__v": 0
+ }
+ ]
+}
```
@@ -715,22 +776,28 @@ curl --request POST \
###### Response Payload
-> | Type | Notes |
-> | ---- | ------------------- |
-> | None | No payload returned |
-
-###### Body
+> | Type | Notes |
+> | -------- | -------------------------------------------------------------------- |
+> | `Object` | `{deletedCount: n}` Returns an object showing how many items deleted |
##### Sample CURL request
```
-
+curl --request POST \
+ --url http://localhost:5000/api/v1/checks/delete/66562414035c4ce6a8a610ac \
+ --header 'Authorization: ' \
```
###### Sample Response
```json
-
+{
+ "success": true,
+ "msg": "Checks deleted",
+ "data": {
+ "deletedCount": 3
+ }
+}
```
@@ -756,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
```
@@ -788,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
+ }
+ ]
+}
```
@@ -816,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
+ }
+ ]
+}
```
@@ -845,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
+ }
+}
```
@@ -867,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
+ }
+}
```
@@ -897,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
+ }
+}
```
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/controllers/checkController.js b/Server/controllers/checkController.js
index ef1a1a071..7734da45b 100644
--- a/Server/controllers/checkController.js
+++ b/Server/controllers/checkController.js
@@ -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);
diff --git a/Server/db/MongoDB.js b/Server/db/MongoDB.js
index 32d5d33f7..aabd3c384 100644
--- a/Server/db/MongoDB.js
+++ b/Server/db/MongoDB.js
@@ -1,6 +1,8 @@
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();
@@ -59,10 +61,6 @@ const getUserByEmail = async (req, res) => {
}
};
-//****************************************
-// Monitors
-//****************************************
-
/**
* Update a user by ID
* @async
@@ -88,6 +86,10 @@ const updateUser = async (req, res) => {
}
};
+//****************************************
+// Monitors
+//****************************************
+
/**
* Get all monitors
* @async
@@ -209,17 +211,21 @@ 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}
* @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 });
+ console.log(checkData);
+ const check = await new Check({ ...checkData }).save();
+ return check;
} catch (error) {
throw error;
}
@@ -228,17 +234,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>}
* @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 +251,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 {number}
* @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;
}
@@ -272,16 +276,21 @@ const deleteChecks = async (req, res) => {
/**
* 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;
}
@@ -290,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;
}
@@ -310,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;
}
diff --git a/Server/validation/joi.js b/Server/validation/joi.js
index 01a0d0ada..75cd48cd1 100644
--- a/Server/validation/joi.js
+++ b/Server/validation/joi.js
@@ -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,
};