From 48668be54077764c27f42b351c791447d0088b56 Mon Sep 17 00:00:00 2001 From: Mann Patel <130435633+MannPatel0@users.noreply.github.com> Date: Sun, 23 Mar 2025 14:49:10 -0600 Subject: [PATCH 1/2] reverting back to local db --- backend/controllers/user.js | 74 +++++++++++++++++++-------------- backend/utils/database.js | 9 ++-- frontend/src/pages/Settings.jsx | 52 ++++++++++++++--------- 3 files changed, 78 insertions(+), 57 deletions(-) diff --git a/backend/controllers/user.js b/backend/controllers/user.js index 33e8a23..27a0dc3 100644 --- a/backend/controllers/user.js +++ b/backend/controllers/user.js @@ -13,13 +13,13 @@ exports.sendVerificationCode = async (req, res) => { // Generate a random 6-digit code const verificationCode = crypto.randomInt(100000, 999999).toString(); console.log( - `Generated verification code for ${email}: ${verificationCode}` + `Generated verification code for ${email}: ${verificationCode}`, ); // Check if email already exists in verification table const [results, fields] = await db.execute( "SELECT * FROM AuthVerification WHERE Email = ?", - [email] + [email], ); if (results.length > 0) { @@ -27,7 +27,7 @@ exports.sendVerificationCode = async (req, res) => { const [result] = await db.execute( `UPDATE AuthVerification SET VerificationCode = ?, Authenticated = FALSE, Date = CURRENT_TIMESTAMP WHERE Email = ?`, - [verificationCode, email] + [verificationCode, email], ); // Send email and respond @@ -37,7 +37,7 @@ exports.sendVerificationCode = async (req, res) => { // Insert new record const [result] = await db.execute( "INSERT INTO AuthVerification (Email, VerificationCode, Authenticated) VALUES (?, ?, FALSE)", - [email, verificationCode] + [email, verificationCode], ); // Send email and respond await sendVerificationEmail(email, verificationCode); @@ -62,7 +62,7 @@ exports.verifyCode = async (req, res) => { // Check verification code const [results, fields] = await db.execute( "SELECT * FROM AuthVerification WHERE Email = ? AND VerificationCode = ? AND Authenticated = 0 AND Date > DATE_SUB(NOW(), INTERVAL 15 MINUTE)", - [email, code] + [email, code], ); if (results.length === 0) { console.log(`Invalid or expired verification code for email ${email}`); @@ -76,7 +76,7 @@ exports.verifyCode = async (req, res) => { // Mark as authenticated const [result] = await db.execute( "UPDATE AuthVerification SET Authenticated = TRUE WHERE Email = ?", - [email] + [email], ); res.json({ success: true, @@ -95,7 +95,7 @@ exports.completeSignUp = async (req, res) => { try { const [results, fields] = await db.execute( `SELECT * FROM AuthVerification WHERE Email = ? AND Authenticated = 1;`, - [data.email] + [data.email], ); if (results.length === 0) { @@ -105,20 +105,20 @@ exports.completeSignUp = async (req, res) => { // Create the user const [createResult] = await db.execute( `INSERT INTO User (Name, Email, UCID, Password, Phone, Address) - VALUES ('${data.name}', '${data.email}', '${data.UCID}', '${data.password}', '${data.phone}', '${data.address}')` + VALUES ('${data.name}', '${data.email}', '${data.UCID}', '${data.password}', '${data.phone}', '${data.address}')`, ); // Insert role using the user's ID const [insertResult] = await db.execute( `INSERT INTO UserRole (UserID, Client, Admin) VALUES (LAST_INSERT_ID(), ${data.client || true}, ${ - data.admin || false - })` + data.admin || false + })`, ); // Delete verification record const [deleteResult] = await db.execute( - `DELETE FROM AuthVerification WHERE Email = '${data.email}'` + `DELETE FROM AuthVerification WHERE Email = '${data.email}'`, ); res.json({ @@ -194,37 +194,47 @@ exports.findUserByEmail = async (req, res) => { }; exports.updateUser = async (req, res) => { - const { userId, ...updateData } = req.body; + try { + const userId = req.body?.userId; + const name = req.body?.name; + const email = req.body?.email; + const phone = req.body?.phone; + const UCID = req.body?.UCID; + const address = req.body?.address; - if (!userId) { - return res.status(400).json({ error: "User ID is required" }); - } + if (!userId) { + return res.status(400).json({ error: "User ID is required" }); + } - //query dynamically based on provided fields - const updateFields = []; - const values = []; + // Build updateData manually + const updateData = {}; + if (name) updateData.name = name; + if (email) updateData.email = email; + if (phone) updateData.phone = phone; + if (UCID) updateData.UCID = UCID; + if (address) updateData.address = address; - Object.entries(updateData).forEach(([key, value]) => { - // Only include fields that are actually in the User table - if (["Name", "Email", "Password", "Phone", "UCID"].includes(key)) { + if (Object.keys(updateData).length === 0) { + return res.status(400).json({ error: "No valid fields to update" }); + } + + const updateFields = []; + const values = []; + + Object.entries(updateData).forEach(([key, value]) => { updateFields.push(`${key} = ?`); values.push(value); - } - }); + }); - if (updateFields.length === 0) { - return res.status(400).json({ error: "No valid fields to update" }); - } + values.push(userId); - // Add userId to values array - values.push(userId); - - try { - const query = `UPDATE User SET ${updateFields.join(", ")} WHERE UserID = ?`; + const query = `UPDATE User SET ${updateFields.join(", ")} WHERE userId = ?`; const [updateResult] = await db.execute(query, values); + if (updateResult.affectedRows === 0) { return res.status(404).json({ error: "User not found" }); } + res.json({ success: true, message: "User updated successfully" }); } catch (error) { console.error("Error updating user:", error); @@ -243,7 +253,7 @@ exports.deleteUser = async (req, res) => { // Delete from UserRole first (assuming foreign key constraint) const [result1] = await db.execute( "DELETE FROM UserRole WHERE UserID = ?", - [userId] + [userId], ); // Then delete from User table diff --git a/backend/utils/database.js b/backend/utils/database.js index e09e374..020e67c 100644 --- a/backend/utils/database.js +++ b/backend/utils/database.js @@ -2,11 +2,10 @@ const mysql = require("mysql2"); //Create a pool of connections to allow multiple query happen at the same time const pool = mysql.createPool({ - host: "marketplace-db.cpkkqmq065sx.ca-central-1.rds.amazonaws.com", - user: "admin", - password: "qizsYh-movpub-wuhdo2", - database: "Marketplace", - port: "3306", + host: "localhost", + user: "root", + database: "marketplace", + password: "12345678", }); //Export a promise for promise-based query diff --git a/frontend/src/pages/Settings.jsx b/frontend/src/pages/Settings.jsx index 15695e5..150ff05 100644 --- a/frontend/src/pages/Settings.jsx +++ b/frontend/src/pages/Settings.jsx @@ -43,7 +43,7 @@ const Settings = () => { body: JSON.stringify({ email: storedUser.email, }), - } + }, ); const data = await response.json(); @@ -53,7 +53,7 @@ const Settings = () => { // Update state with fetched data setUserData((prevData) => ({ ...prevData, - userId: data.userId || storedUser.id || "", // Try both sources + userId: storedUser.ID, // Try both sources name: data.name || storedUser.name || "", email: data.email || storedUser.email || "", UCID: data.UCID || storedUser.UCID || "", @@ -70,7 +70,7 @@ const Settings = () => { } catch (error) { console.error("Error fetching user data:", error); setError( - error.message || "An error occurred while loading your profile" + error.message || "An error occurred while loading your profile", ); } finally { setIsLoading(false); @@ -88,27 +88,39 @@ const Settings = () => { })); }; - const handleProfileUpdate = async (e) => { - e.preventDefault(); + const handleUpdateProfile = async () => { try { - // TODO: Implement the actual update API call - console.log("Profile updated:", userData); + // Ensure userId is present + if (!userData.userId) { + throw new Error("User ID is missing. Unable to update profile."); + } - // Update localStorage with new user data - const storedUser = JSON.parse(localStorage.getItem("user")); - const updatedUser = { - ...storedUser, - name: userData.name, - phone: userData.phone, - UCID: userData.UCID, - address: userData.address, - }; - localStorage.setItem("user", JSON.stringify(updatedUser)); + setIsLoading(true); + setError(null); + const response = await fetch("http://localhost:3030/api/user/update", { + method: "POST", // or "PUT" if your backend supports it + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(userData), + }); + + const result = await response.json(); + + if (!response.ok) { + throw new Error(result.error || "Failed to update profile"); + } + + console.log("Profile updated successfully:", result); alert("Profile updated successfully!"); } catch (error) { console.error("Error updating profile:", error); - alert("Failed to update profile: " + error.message); + setError( + error.message || "An error occurred while updating your profile.", + ); + } finally { + setIsLoading(false); } }; @@ -156,7 +168,7 @@ const Settings = () => { const handleDeleteAccount = async () => { if ( window.confirm( - "Are you sure you want to delete your account? This action cannot be undone." + "Are you sure you want to delete your account? This action cannot be undone.", ) ) { try { @@ -232,7 +244,7 @@ const Settings = () => {
-
+