From 89d36a6ae22aa40fc83e8929ec214f87b1fa12e8 Mon Sep 17 00:00:00 2001 From: Federico Hurtado <fed_home@Federicos-Mac-mini.local> Date: Wed, 30 Oct 2024 11:00:12 -0400 Subject: [PATCH] Able to get login events within a specified timerange. Set up endpoint fully. --- backend/index.js | 2 ++ backend/repository/activityRepository.js | 19 ++++++++++++++- backend/routes/activityMonitoringRoutes.js | 28 ++++++++++++++++++++++ backend/service/activityLoggerService.js | 15 +++++++++--- 4 files changed, 60 insertions(+), 4 deletions(-) create mode 100644 backend/routes/activityMonitoringRoutes.js diff --git a/backend/index.js b/backend/index.js index 056453e..e571663 100644 --- a/backend/index.js +++ b/backend/index.js @@ -3,6 +3,7 @@ const session = require("express-session"); const cors = require("cors"); require("dotenv").config(); const userRoutes = require("./routes/userRoutes"); +const activityRouter = require("./routes/activityMonitoringRoutes"); // create connection to db and initialize table schema const { pool } = require("./config/database/database.config"); @@ -49,6 +50,7 @@ app.use(function (req, res, next) { require("./config/auth/auth.routes")(app); app.use("/api/user", userRoutes); app.use("/api/person", peopleRouter); +app.use("/api/activity", activityRouter); // Basic route to check if server is running app.get("/api", (req, res) => { diff --git a/backend/repository/activityRepository.js b/backend/repository/activityRepository.js index 3f3b4fd..7a69c34 100644 --- a/backend/repository/activityRepository.js +++ b/backend/repository/activityRepository.js @@ -27,7 +27,23 @@ async function logSuccessfulLogin(userId, timestamp) { } } -async function getLoginDataTimerange() {} +async function getLoginDataTimerange(start, end) { + try { + // get all login data within the start and end timerange + const query = ` + SELECT * + FROM userLogin + WHERE eventTimestamp BETWEEN ? AND ? + ORDER BY eventTimestamp DESC + `; + const [rows] = await pool.query(query, [start, end]); + return rows; + } catch (error) { + // throw error to be caught in service + console.error("Error fetching login data:", error); + throw error; + } +} async function getLoginDataByUser() {} @@ -39,4 +55,5 @@ async function getDatabaseChangeByUser() {} module.exports = { logSuccessfulLogin, + getLoginDataTimerange, }; diff --git a/backend/routes/activityMonitoringRoutes.js b/backend/routes/activityMonitoringRoutes.js new file mode 100644 index 0000000..17d4c1f --- /dev/null +++ b/backend/routes/activityMonitoringRoutes.js @@ -0,0 +1,28 @@ +const express = require("express"); +const { viewLoginsTimerange } = require("../service/activityLoggerService"); + +const activityRouter = express.Router(); + +// get login history by timerange +activityRouter.get("/login-data", async (req, res) => { + const { start, end } = req.query; + + // ensure both params are given + if (!start || !end) { + return res + .status(400) + .json({ message: "Please provide both start and end dates." }); + } + + try { + const data = await viewLoginsTimerange(start, end); + res.status(200).json(data); + } catch { + console.log("error fetching login data: ", error); + res.status(500).json({ message: "Internal service error." }); + } +}); + +// get db history for timerange + +module.exports = activityRouter; diff --git a/backend/service/activityLoggerService.js b/backend/service/activityLoggerService.js index ebc0e82..80c0da9 100644 --- a/backend/service/activityLoggerService.js +++ b/backend/service/activityLoggerService.js @@ -1,4 +1,7 @@ -const { logSuccessfulLogin } = require("../repository/activityRepository"); +const { + logSuccessfulLogin, + getLoginDataTimerange, +} = require("../repository/activityRepository"); /* Function that creates a row of data in the userLogin table @@ -15,8 +18,14 @@ async function documentSuccessfulLogin(userId, timestamp) { async function logDatabaseChange() {} -async function viewLogins() {} +/* +Get the login data for a sopecific time range +*/ +async function viewLoginsTimerange(start, end) { + // will throw error if there is a problem + return await getLoginDataTimerange(start, end); +} async function viewDatabaseChanges() {} -module.exports = { documentSuccessfulLogin }; +module.exports = { documentSuccessfulLogin, viewLoginsTimerange }; -- GitLab