From 6589d0ef062ddcb093995aec06a991e6cdfddcbe Mon Sep 17 00:00:00 2001 From: MuhammadKhalilzadeh Date: Mon, 8 Jul 2024 10:50:57 +0330 Subject: [PATCH 1/9] limiting getChecks to the last 25 checks --- Server/controllers/checkController.js | 14 ++++++++++---- Server/db/MongoDB.js | 2 +- Server/utils/messages.js | 3 +++ 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/Server/controllers/checkController.js b/Server/controllers/checkController.js index 391ae2700..7e899e8ef 100644 --- a/Server/controllers/checkController.js +++ b/Server/controllers/checkController.js @@ -4,7 +4,7 @@ const { getChecksParamValidation, deleteChecksParamValidation, } = require("../validation/joi"); -const { successMessages } = require("../utils/messages"); +const { successMessages, errorMessages } = require("../utils/messages"); const SERVICE_NAME = "check"; const createCheck = async (req, res, next) => { @@ -44,9 +44,15 @@ const getChecks = async (req, res, next) => { try { const checks = await req.db.getChecks(req.params.monitorId); - return res - .status(200) - .json({ success: true, msg: successMessages.CHECK_GET, data: checks }); + if (checks) { + return res + .status(200) + .json({ success: true, msg: successMessages.CHECK_GET, data: checks }); + } else { + return res + .status(404) + .json({ success: false, msg: errorMessages.CHECKS_NOT_FOUND, data: [] }) + } } catch (error) { error.service = SERVICE_NAME; next(error); diff --git a/Server/db/MongoDB.js b/Server/db/MongoDB.js index 738708696..05ea59ac4 100644 --- a/Server/db/MongoDB.js +++ b/Server/db/MongoDB.js @@ -416,7 +416,7 @@ const createCheck = async (checkData) => { const getChecks = async (monitorId) => { try { - const checks = await Check.find({ monitorId }); + const checks = await Check.find({ monitorId }).sort({ createdAt: -1 }).limit(25); return checks; } catch (error) { throw error; diff --git a/Server/utils/messages.js b/Server/utils/messages.js index aded84d59..ee993d70d 100644 --- a/Server/utils/messages.js +++ b/Server/utils/messages.js @@ -38,6 +38,9 @@ const errorMessages = { JOB_QUEUE_WORKER_CLOSE: "Error closing worker", JOB_QUEUE_DELETE_JOB: "Job not found in queue", JOB_QUEUE_OBLITERATE: "Error obliterating queue", + + // Checks Error + CHECKS_NOT_FOUND: "No Checks found for this monitor", }; const successMessages = { From e76bee70d693b8fc4d9976115fd8440dceeaa1b0 Mon Sep 17 00:00:00 2001 From: MuhammadKhalilzadeh Date: Mon, 8 Jul 2024 21:05:41 +0330 Subject: [PATCH 2/9] Error handling removed --- Server/controllers/checkController.js | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/Server/controllers/checkController.js b/Server/controllers/checkController.js index 7e899e8ef..34ae7da2c 100644 --- a/Server/controllers/checkController.js +++ b/Server/controllers/checkController.js @@ -44,15 +44,9 @@ const getChecks = async (req, res, next) => { try { const checks = await req.db.getChecks(req.params.monitorId); - if (checks) { - return res - .status(200) - .json({ success: true, msg: successMessages.CHECK_GET, data: checks }); - } else { - return res - .status(404) - .json({ success: false, msg: errorMessages.CHECKS_NOT_FOUND, data: [] }) - } + return res + .status(200) + .json({ success: true, msg: successMessages.CHECK_GET, data: checks }); } catch (error) { error.service = SERVICE_NAME; next(error); From 98be150d6d184c44ccdd8af2a9b8c96e02febdee Mon Sep 17 00:00:00 2001 From: MuhammadKhalilzadeh Date: Mon, 8 Jul 2024 21:07:14 +0330 Subject: [PATCH 3/9] extre imports and constants removed --- Server/controllers/checkController.js | 2 +- Server/utils/messages.js | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/Server/controllers/checkController.js b/Server/controllers/checkController.js index 34ae7da2c..391ae2700 100644 --- a/Server/controllers/checkController.js +++ b/Server/controllers/checkController.js @@ -4,7 +4,7 @@ const { getChecksParamValidation, deleteChecksParamValidation, } = require("../validation/joi"); -const { successMessages, errorMessages } = require("../utils/messages"); +const { successMessages } = require("../utils/messages"); const SERVICE_NAME = "check"; const createCheck = async (req, res, next) => { diff --git a/Server/utils/messages.js b/Server/utils/messages.js index ee993d70d..aded84d59 100644 --- a/Server/utils/messages.js +++ b/Server/utils/messages.js @@ -38,9 +38,6 @@ const errorMessages = { JOB_QUEUE_WORKER_CLOSE: "Error closing worker", JOB_QUEUE_DELETE_JOB: "Job not found in queue", JOB_QUEUE_OBLITERATE: "Error obliterating queue", - - // Checks Error - CHECKS_NOT_FOUND: "No Checks found for this monitor", }; const successMessages = { From 3e6b9049ecc1aa09f4eeaaa8f98b50567a446a5e Mon Sep 17 00:00:00 2001 From: MuhammadKhalilzadeh Date: Mon, 8 Jul 2024 21:32:07 +0330 Subject: [PATCH 4/9] Add customization to limiting --- Server/controllers/checkController.js | 7 ++++++- Server/db/MongoDB.js | 8 ++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/Server/controllers/checkController.js b/Server/controllers/checkController.js index 391ae2700..7a556f3a5 100644 --- a/Server/controllers/checkController.js +++ b/Server/controllers/checkController.js @@ -42,8 +42,13 @@ const getChecks = async (req, res, next) => { return; } + let limitedTo = null; + try { - const checks = await req.db.getChecks(req.params.monitorId); + if (req.query && req.query.limit) { + limitedTo = parseInt(req.query.limit); + } + const checks = await req.db.getChecks(req.params.monitorId, limitedTo); return res .status(200) .json({ success: true, msg: successMessages.CHECK_GET, data: checks }); diff --git a/Server/db/MongoDB.js b/Server/db/MongoDB.js index 05ea59ac4..67e86ea3f 100644 --- a/Server/db/MongoDB.js +++ b/Server/db/MongoDB.js @@ -414,9 +414,13 @@ const createCheck = async (checkData) => { * @throws {Error} */ -const getChecks = async (monitorId) => { +const getChecks = async (monitorId, limitedTo) => { try { - const checks = await Check.find({ monitorId }).sort({ createdAt: -1 }).limit(25); + if (limitedTo) { + const checks = await Check.find({ monitorId }).sort({ createdAt: -1 }).limit(limitedTo); + return checks; + } + const checks = await Check.find({ monitorId }) return checks; } catch (error) { throw error; From 7db5433361b1a116321d988f3e3a04bdcd7190c5 Mon Sep 17 00:00:00 2001 From: MuhammadKhalilzadeh Date: Mon, 8 Jul 2024 22:55:23 +0330 Subject: [PATCH 5/9] Renaming the variable --- Server/controllers/checkController.js | 6 +++--- Server/db/MongoDB.js | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Server/controllers/checkController.js b/Server/controllers/checkController.js index 7a556f3a5..3014937fb 100644 --- a/Server/controllers/checkController.js +++ b/Server/controllers/checkController.js @@ -42,13 +42,13 @@ const getChecks = async (req, res, next) => { return; } - let limitedTo = null; + let limit = null; try { if (req.query && req.query.limit) { - limitedTo = parseInt(req.query.limit); + limit = parseInt(req.query.limit); } - const checks = await req.db.getChecks(req.params.monitorId, limitedTo); + const checks = await req.db.getChecks(req.params.monitorId, limit); return res .status(200) .json({ success: true, msg: successMessages.CHECK_GET, data: checks }); diff --git a/Server/db/MongoDB.js b/Server/db/MongoDB.js index 67e86ea3f..75fd2310a 100644 --- a/Server/db/MongoDB.js +++ b/Server/db/MongoDB.js @@ -414,10 +414,10 @@ const createCheck = async (checkData) => { * @throws {Error} */ -const getChecks = async (monitorId, limitedTo) => { +const getChecks = async (monitorId, limit) => { try { - if (limitedTo) { - const checks = await Check.find({ monitorId }).sort({ createdAt: -1 }).limit(limitedTo); + if (limit) { + const checks = await Check.find({ monitorId }).sort({ createdAt: -1 }).limit(limit); return checks; } const checks = await Check.find({ monitorId }) From 8265f1200d0ad8a24bbefcebcc2ad588988c023a Mon Sep 17 00:00:00 2001 From: MuhammadKhalilzadeh Date: Tue, 9 Jul 2024 09:53:48 +0330 Subject: [PATCH 6/9] Optional query param added to the url --- Server/routes/checkRoute.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Server/routes/checkRoute.js b/Server/routes/checkRoute.js index 6569dd49a..a8687cff1 100644 --- a/Server/routes/checkRoute.js +++ b/Server/routes/checkRoute.js @@ -10,7 +10,7 @@ router.post( ); router.get( - "/:monitorId", + "/:monitorId?limit", verifyOwnership(Monitor, "monitorId"), checkController.getChecks ); From 1a15c0c9b3a5a5cdb93f63fbee3fccbc17500b2f Mon Sep 17 00:00:00 2001 From: MuhammadKhalilzadeh Date: Wed, 10 Jul 2024 21:38:27 +0330 Subject: [PATCH 7/9] Readme modified according to limited get monitors --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 84874ea40..df52e78c6 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ You can see the designs [here](https://www.figma.com/design/RPSfaw66HjzSwzntKcgD - POST [/api/v1/auth/recovery/reset](#post-auth-recovery-reset-id) ###### Monitors - GET [/api/v1/monitors](#get-monitors) - - GET [/api/v1/monitor/{id}](#get-monitor-id) + - GET [/api/v1/monitor/{id}?limit](#get-monitor-id) - GET [/api/v1/monitors/user/{userId}](#get-monitors-user-userid) - POST [/api/v1/monitors](#post-monitors) - POST [/api/v1/monitors/delete/{monitorId}](#post-monitors-del-id) @@ -678,7 +678,7 @@ curl --request GET \
-GET /api/v1/monitor/{id} +GET /api/v1/monitor/{id}?limit ###### Method/Headers @@ -696,7 +696,7 @@ curl --request GET \ ``` curl --request GET \ - --url http://localhost:5000/api/v1/monitors/664d070786e62625ac612ca1 \ + --url http://localhost:5000/api/v1/monitors/664d070786e62625ac612ca1?limit=25 \ --header '' \ ``` From e7ea80f8208f5c6e8342c25278be43a6a2f5ace3 Mon Sep 17 00:00:00 2001 From: MuhammadKhalilzadeh Date: Thu, 11 Jul 2024 09:29:33 +0330 Subject: [PATCH 8/9] undo changes --- README.md | 6 +++--- Server/controllers/checkController.js | 7 +------ Server/routes/checkRoute.js | 2 +- 3 files changed, 5 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index df52e78c6..84874ea40 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ You can see the designs [here](https://www.figma.com/design/RPSfaw66HjzSwzntKcgD - POST [/api/v1/auth/recovery/reset](#post-auth-recovery-reset-id) ###### Monitors - GET [/api/v1/monitors](#get-monitors) - - GET [/api/v1/monitor/{id}?limit](#get-monitor-id) + - GET [/api/v1/monitor/{id}](#get-monitor-id) - GET [/api/v1/monitors/user/{userId}](#get-monitors-user-userid) - POST [/api/v1/monitors](#post-monitors) - POST [/api/v1/monitors/delete/{monitorId}](#post-monitors-del-id) @@ -678,7 +678,7 @@ curl --request GET \
-GET /api/v1/monitor/{id}?limit +GET /api/v1/monitor/{id} ###### Method/Headers @@ -696,7 +696,7 @@ curl --request GET \ ``` curl --request GET \ - --url http://localhost:5000/api/v1/monitors/664d070786e62625ac612ca1?limit=25 \ + --url http://localhost:5000/api/v1/monitors/664d070786e62625ac612ca1 \ --header '' \ ``` diff --git a/Server/controllers/checkController.js b/Server/controllers/checkController.js index 3014937fb..391ae2700 100644 --- a/Server/controllers/checkController.js +++ b/Server/controllers/checkController.js @@ -42,13 +42,8 @@ const getChecks = async (req, res, next) => { return; } - let limit = null; - try { - if (req.query && req.query.limit) { - limit = parseInt(req.query.limit); - } - const checks = await req.db.getChecks(req.params.monitorId, limit); + const checks = await req.db.getChecks(req.params.monitorId); return res .status(200) .json({ success: true, msg: successMessages.CHECK_GET, data: checks }); diff --git a/Server/routes/checkRoute.js b/Server/routes/checkRoute.js index a8687cff1..6569dd49a 100644 --- a/Server/routes/checkRoute.js +++ b/Server/routes/checkRoute.js @@ -10,7 +10,7 @@ router.post( ); router.get( - "/:monitorId?limit", + "/:monitorId", verifyOwnership(Monitor, "monitorId"), checkController.getChecks ); From 6b8af0f669575fb1660b0fb8e8f82becc59722b4 Mon Sep 17 00:00:00 2001 From: MuhammadKhalilzadeh Date: Thu, 11 Jul 2024 10:20:39 +0330 Subject: [PATCH 9/9] Transfering limit to get monitors by Id. Plus, readme file changes --- README.md | 6 +++--- Server/db/MongoDB.js | 29 ++++++++++++++++++----------- Server/routes/monitorRoute.js | 2 +- 3 files changed, 22 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 84874ea40..a11d6f770 100644 --- a/README.md +++ b/README.md @@ -48,7 +48,7 @@ You can see the designs [here](https://www.figma.com/design/RPSfaw66HjzSwzntKcgD ###### Monitors - GET [/api/v1/monitors](#get-monitors) - GET [/api/v1/monitor/{id}](#get-monitor-id) - - GET [/api/v1/monitors/user/{userId}](#get-monitors-user-userid) + - GET [/api/v1/monitors/user/{userId}?limit](#get-monitors-user-userid) - POST [/api/v1/monitors](#post-monitors) - POST [/api/v1/monitors/delete/{monitorId}](#post-monitors-del-id) - POST [/api/v1/monitors/edit/{monitorId}](#post-monitors-edit-id) @@ -749,7 +749,7 @@ curl --request GET \
-GET /api/v1/monitors/user/{userId} +GET /api/v1/monitors/user/{userId}?limit ###### Method/Headers @@ -767,7 +767,7 @@ curl --request GET \ ``` curl --request GET \ - --url http://localhost:5000/api/v1/monitors/user/6645079aae0b439371913972 \ + --url http://localhost:5000/api/v1/monitors/user/6645079aae0b439371913972?limit=25 \ --header '' \ ``` diff --git a/Server/db/MongoDB.js b/Server/db/MongoDB.js index 75fd2310a..0ca7d0d65 100644 --- a/Server/db/MongoDB.js +++ b/Server/db/MongoDB.js @@ -270,15 +270,26 @@ const getMonitorById = async (req, res) => { */ const getMonitorsByUserId = async (req, res) => { try { + const limit = req.body.limit; const monitors = await Monitor.find({ userId: req.params.userId }); // Map each monitor to include its associated checks const monitorsWithChecks = await Promise.all( monitors.map(async (monitor) => { - // Checks are order oldest -> newest - const checks = await Check.find({ monitorId: monitor._id }).sort({ - createdAt: 1, - }); - return { ...monitor.toObject(), checks }; + + if(limit) { + // Checks are order oldest -> newest + const checks = await Check.find({ monitorId: monitor._id }).sort({ + createdAt: 1, + }).limit(limit);; + return { ...monitor.toObject(), checks }; + + } else { + // Checks are order oldest -> newest + const checks = await Check.find({ monitorId: monitor._id }).sort({ + createdAt: 1, + }); + return { ...monitor.toObject(), checks }; + } }) ); @@ -414,13 +425,9 @@ const createCheck = async (checkData) => { * @throws {Error} */ -const getChecks = async (monitorId, limit) => { +const getChecks = async (monitorId) => { try { - if (limit) { - const checks = await Check.find({ monitorId }).sort({ createdAt: -1 }).limit(limit); - return checks; - } - const checks = await Check.find({ monitorId }) + const checks = await Check.find({ monitorId }); return checks; } catch (error) { throw error; diff --git a/Server/routes/monitorRoute.js b/Server/routes/monitorRoute.js index ae7a5852e..d19aedad9 100644 --- a/Server/routes/monitorRoute.js +++ b/Server/routes/monitorRoute.js @@ -5,7 +5,7 @@ const Monitor = require("../models/Monitor"); router.get("/", monitorController.getAllMonitors); router.get("/:monitorId", monitorController.getMonitorById); -router.get("/user/:userId", monitorController.getMonitorsByUserId); +router.get("/user/:userId?limit", monitorController.getMonitorsByUserId); router.post("/", monitorController.createMonitor); router.post(