From 0a1db869f7ba0a78206ab755bbc9ef8db14224ea Mon Sep 17 00:00:00 2001 From: estherdev03 Date: Mon, 21 Apr 2025 17:03:09 -0600 Subject: [PATCH] fix delete category --- backend/controllers/category.js | 18 +++++++++++++----- mysql-code/Init-Data.sql | 9 +++++---- mysql-code/Schema.sql | 19 +++---------------- 3 files changed, 21 insertions(+), 25 deletions(-) diff --git a/backend/controllers/category.js b/backend/controllers/category.js index 4764dbf..307752b 100644 --- a/backend/controllers/category.js +++ b/backend/controllers/category.js @@ -7,7 +7,7 @@ exports.getAllCategoriesWithPagination = async (req, res) => { try { const [data, _] = await db.execute( "SELECT * FROM Category C ORDER BY C.CategoryID ASC LIMIT ? OFFSET ?", - [limit.toString(), offset.toString()], + [limit.toString(), offset.toString()] ); const [result] = await db.execute("SELECT COUNT(*) AS count FROM Category"); @@ -24,7 +24,7 @@ exports.addCategory = async (req, res) => { try { const [result] = await db.execute( "INSERT INTO Category (Name) VALUES (?)", - [name], + [name] ); res.json({ message: "Adding new category successfully!" }); } catch (error) { @@ -34,15 +34,23 @@ exports.addCategory = async (req, res) => { exports.removeCategory = async (req, res) => { const { id } = req.params; - try { + if (id == "1") throw Error("You're not allowed to delete this category!"); + const [updateResult] = await db.execute( + "UPDATE Product SET CategoryID = 1 WHERE CategoryID = ?", + [id] + ); + const [result] = await db.execute( `DELETE FROM Category WHERE CategoryID = ?`, - [id], + [id] ); + res.json({ message: "Delete category successfully!" }); } catch (error) { - res.json({ error: "Cannot remove category from database!" }); + res.json({ + error: error.message || "Cannot remove category from database!", + }); } }; diff --git a/mysql-code/Init-Data.sql b/mysql-code/Init-Data.sql index 3c7dae5..1c91b24 100644 --- a/mysql-code/Init-Data.sql +++ b/mysql-code/Init-Data.sql @@ -72,6 +72,7 @@ VALUES INSERT INTO Category (Name) VALUES + ('Other'), ('Textbooks'), ('Electronics'), ('Furniture'), @@ -100,9 +101,8 @@ VALUES ('Winter Clothing'), ('Photography Equipment'), ('Event Tickets'), - ('Software Licenses'), - ('Transportation (Car Pool)'), - ('Other'); + ('Software Licenses'); + -- Insert Products INSERT INTO @@ -454,4 +454,5 @@ VALUES 1, 'This is a great fake product! Totally recommend it.', 5, - ); + '2024-10-02 16:00:00' + ) diff --git a/mysql-code/Schema.sql b/mysql-code/Schema.sql index cc8b772..bd68fdd 100644 --- a/mysql-code/Schema.sql +++ b/mysql-code/Schema.sql @@ -28,19 +28,6 @@ CREATE TABLE Category ( Name VARCHAR(255) NOT NULL ); -CREATE TABLE Product ( - ProductID INT AUTO_INCREMENT PRIMARY KEY, - Name VARCHAR(255) NOT NULL, - Price DECIMAL(10, 2) NOT NULL, - StockQuantity INT, - UserID INT, - Description TEXT, - CategoryID INT NOT NULL, - Date DATETIME DEFAULT CURRENT_TIMESTAMP, - FOREIGN KEY (UserID) REFERENCES User (UserID), - FOREIGN KEY (CategoryID) REFERENCES Category (CategoryID) -); - -- Product Entity CREATE TABLE Product ( ProductID INT AUTO_INCREMENT PRIMARY KEY, @@ -51,7 +38,7 @@ CREATE TABLE Product ( Description TEXT, CategoryID INT, Date DATETIME DEFAULT CURRENT_TIMESTAMP, - FOREIGN KEY (UserID) REFERENCES User (UserID) ON DELETE SET NULL, + FOREIGN KEY (UserID) REFERENCES User (UserID) ON DELETE CASCADE, FOREIGN KEY (CategoryID) REFERENCES Category (CategoryID) ); @@ -73,7 +60,7 @@ CREATE TABLE Review ( AND Rating <= 5 ), Date DATETIME DEFAULT CURRENT_TIMESTAMP, - FOREIGN KEY (UserID) REFERENCES User (UserID) ON DELETE SET NULL, + FOREIGN KEY (UserID) REFERENCES User (UserID) ON DELETE CASCADE, FOREIGN KEY (ProductID) REFERENCES Product (ProductID) ON DELETE CASCADE ); @@ -85,7 +72,7 @@ CREATE TABLE Transaction ( Date DATETIME DEFAULT CURRENT_TIMESTAMP, PaymentStatus VARCHAR(50), FOREIGN KEY (UserID) REFERENCES User (UserID) ON DELETE CASCADE, - FOREIGN KEY (ProductID) REFERENCES Product (ProductID) ON DELETE SET NULL + FOREIGN KEY (ProductID) REFERENCES Product (ProductID) ON DELETE CASCADE ); -- Recommendation Entity (Many-to-One with User, Many-to-One with Product)