reverting back to local db

This commit is contained in:
Mann Patel
2025-03-23 14:49:10 -06:00
parent 01d5e1b67b
commit 48668be540
3 changed files with 78 additions and 57 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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 = () => {
</div>
<div className="p-4">
<form onSubmit={handleProfileUpdate}>
<form onSubmit={handleUpdateProfile}>
<div className="grid grid-cols-1 md:grid-cols-2 gap-4 mb-4">
<div>
<label