diff --git a/backend/database.js b/backend/database.js index e22fb41..d9e7167 100644 --- a/backend/database.js +++ b/backend/database.js @@ -1,5 +1,6 @@ import mysql from "mysql2"; import dotenv from "dotenv"; +import { error } from "console"; dotenv.config(); // Create a MySQL connection pool using environment variables for configuration @@ -130,3 +131,12 @@ export async function deleteUser( } } catch (err) {} } + +export async function getAllUsers() { + try { + const [data] = await pool.query("SELECT * FROM users;"); + return { result: data, success: true }; + } catch (err) { + return { result: err, success: false }; + } +} diff --git a/backend/server.js b/backend/server.js index 3f2b8aa..6dab1e9 100644 --- a/backend/server.js +++ b/backend/server.js @@ -4,7 +4,13 @@ const app = express(); const port = 4000; // Importing database functions for user operations -import { loginUser, createUser, updateUser, deleteUser } from "./database.js"; +import { + loginUser, + createUser, + updateUser, + deleteUser, + getAllUsers, +} from "./database.js"; // Middleware to parse URL-encoded bodies (form submissions) app.use(express.urlencoded({ extended: true })); @@ -39,9 +45,23 @@ app.get("/", (req, res) => { // Variable to keep track of the latest logged-in user let latestUser; +let response; + +// static function to get all users +function allUsers() { + getAllUsers().then((resultFromFunc) => { + if (resultFromFunc.success) { + response = resultFromFunc.result; + } else { + response = resultFromFunc.result; + } + }); +} // Route to handle user login app.post("/login", (req, res) => { + allUsers(); + // Attempt to log in the user with provided credentials loginUser(req.body.username, req.body.password).then((result) => { if (result.success) { @@ -51,6 +71,7 @@ app.post("/login", (req, res) => { newLink: `/dashboard/${result.user.id}`, alert: null, success: null, + users: response, }); latestUser = result; } else { @@ -77,12 +98,22 @@ app.post(["/createUser", "/updateUser", "/deleteUser"], (req, res) => { if (latestUser && req.body.username !== latestUser.user.username) { funcName = deleteUser; } else { + let response; + + getAllUsers().then((resultFromFunc) => { + if (resultFromFunc.success) { + response = resultFromFunc.result; + } else { + response = resultFromFunc.result; + } + }); // Render dashboard with alert if trying to delete logged-in user res.status(400).render("dashboard.ejs", { sqlResult: latestUser, newLink: latestUser ? `/dashboard/${latestUser.id}` : "#", alert: "Cannot delete the currently logged-in user!", success: null, + users: response, }); return; } @@ -100,20 +131,41 @@ app.post(["/createUser", "/updateUser", "/deleteUser"], (req, res) => { req.body.email ).then((result) => { if (result.success === true) { + let response; + + getAllUsers().then((resultFromFunc) => { + if (resultFromFunc.success) { + response = resultFromFunc.result; + } else { + response = resultFromFunc.result; + } + }); // On success, render dashboard with success message res.status(201).render("dashboard.ejs", { sqlResult: latestUser, newLink: `/dashboard/${latestUser.id}`, alert: null, success: "User action successful!", + users: response, }); } else { + let response; + + getAllUsers().then((resultFromFunc) => { + if (resultFromFunc.success) { + response = resultFromFunc.result; + } else { + response = resultFromFunc.result; + } + }); + // On failure, render dashboard with alert res.status(400).render("dashboard.ejs", { sqlResult: latestUser, newLink: `/dashboard/${latestUser.id}`, alert: "User action failed!", success: null, + users: response, }); } }); diff --git a/backend/views/dashboard.ejs b/backend/views/dashboard.ejs index 7b9cdf3..b182d30 100644 --- a/backend/views/dashboard.ejs +++ b/backend/views/dashboard.ejs @@ -227,6 +227,16 @@ Delete User + +
+ +
@@ -239,6 +249,37 @@

+ +
+

All Users

+ + + + + + + + + + + + + + + <% users.forEach(user => { %> + + + + + + + + + + <% }) %> + +
idUsernameFirst nameLast nameE-MailPasswordCreated
<%= user.id %><%= user.username %><%= user.first_name %><%= user.last_name %><%= user.email %><%= user.password %><%= user.created.toISOString() %>
+