diff --git a/backend/index.js b/backend/index.js index 056453e40784243ab24898d5b41fb3a91faf2fe5..e571663e5ad0328388d8fe2f6192953877f1f843 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 3f3b4fd8950d2fc5c8cbad9f72561bdf888c8002..7a69c34856188141c04a924d8733bcc2c3cd608a 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 0000000000000000000000000000000000000000..17d4c1f0e6454570c3e1cb44c5d20253d859c273 --- /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 ebc0e82b0711883b8fe6a4acbbde5eece56e220b..80c0da9443d87fde439af420b8e05a4ce35f36d1 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 };