From 85e6d7fe001c2c3519fcbddb043630873145dcac Mon Sep 17 00:00:00 2001 From: Theis Gaedigk Date: Sun, 23 Nov 2025 21:39:18 +0100 Subject: [PATCH] fixed bugs --- admin/src/components/ItemTable.tsx | 2 +- admin/src/utils/userActions.ts | 3 +-- .../admin/database/itemDataMgmt.database.js | 17 ++++++++++++++--- backendV2/routes/admin/itemDataMgmt.route.js | 6 ++++-- backendV2/schemeV2.sql | 3 ++- 5 files changed, 22 insertions(+), 9 deletions(-) diff --git a/admin/src/components/ItemTable.tsx b/admin/src/components/ItemTable.tsx index b72512b..16336e0 100644 --- a/admin/src/components/ItemTable.tsx +++ b/admin/src/components/ItemTable.tsx @@ -68,7 +68,7 @@ const ItemTable: React.FC = () => { const handleLockerNumberChange = (id: number, value: string) => { setItems((prev) => - prev.map((it) => (it.id === id ? { ...it, lockerNumber: value } : it)) + prev.map((it) => (it.id === id ? { ...it, safe_nr: value } : it)) ); }; diff --git a/admin/src/utils/userActions.ts b/admin/src/utils/userActions.ts index 76eea03..eb254a1 100644 --- a/admin/src/utils/userActions.ts +++ b/admin/src/utils/userActions.ts @@ -200,7 +200,6 @@ export const handleEditItems = async ( safe_nr: string | null, can_borrow_role: string ) => { - const newSafeNr = Number(safe_nr || 0); try { const response = await fetch( `${API_BASE}/api/admin/item-data/edit-item/${itemId}`, @@ -210,7 +209,7 @@ export const handleEditItems = async ( "Content-Type": "application/json", Authorization: `Bearer ${Cookies.get("token")}`, }, - body: JSON.stringify({ item_name, newSafeNr, can_borrow_role }), + body: JSON.stringify({ item_name, safe_nr, can_borrow_role }), } ); if (!response.ok) { diff --git a/backendV2/routes/admin/database/itemDataMgmt.database.js b/backendV2/routes/admin/database/itemDataMgmt.database.js index 98bbc30..2637f9c 100644 --- a/backendV2/routes/admin/database/itemDataMgmt.database.js +++ b/backendV2/routes/admin/database/itemDataMgmt.database.js @@ -32,10 +32,21 @@ export const createItem = async (item_name, can_borrow_role, lockerNumber) => { return { success: false }; }; -export const editItemById = async (itemId, item_name, can_borrow_role) => { +export const editItemById = async ( + itemId, + item_name, + can_borrow_role, + safe_nr +) => { + let newSafeNr; + if (safe_nr === null || safe_nr === "") { + newSafeNr = null; + } else { + newSafeNr = safe_nr; + } const [result] = await pool.query( - "UPDATE items SET item_name = ?, can_borrow_role = ?, entry_updated_at = NOW() WHERE id = ?", - [item_name, can_borrow_role, itemId] + "UPDATE items SET item_name = ?, can_borrow_role = ?, safe_nr = ?, entry_updated_at = NOW() WHERE id = ?", + [item_name, can_borrow_role, newSafeNr, itemId] ); if (result.affectedRows > 0) return { success: true }; return { success: false }; diff --git a/backendV2/routes/admin/itemDataMgmt.route.js b/backendV2/routes/admin/itemDataMgmt.route.js index 9ca8642..77eb6ad 100644 --- a/backendV2/routes/admin/itemDataMgmt.route.js +++ b/backendV2/routes/admin/itemDataMgmt.route.js @@ -41,11 +41,13 @@ router.post("/create-item", authenticateAdmin, async (req, res) => { router.post("/edit-item/:id", authenticateAdmin, async (req, res) => { const itemId = req.params.id; - const { item_name, can_borrow_role } = req.body; + const { item_name, can_borrow_role, safe_nr } = req.body; + const result = await editItemById( itemId, item_name, - can_borrow_role + can_borrow_role, + safe_nr ); if (result.success) { return res.status(200).json({ message: "Item edited successfully" }); diff --git a/backendV2/schemeV2.sql b/backendV2/schemeV2.sql index 7e44a57..d434f5e 100644 --- a/backendV2/schemeV2.sql +++ b/backendV2/schemeV2.sql @@ -43,7 +43,8 @@ CREATE TABLE items ( last_borrowed_person varchar(255) DEFAULT NULL, currently_borrowing varchar(255) DEFAULT NULL, PRIMARY KEY (id), - CHECK (safe_nr REGEXP '^[0-9]{2}$' OR safe_nr IS NULL) + CHECK (safe_nr REGEXP '^[0-9]{2}$' OR safe_nr IS NULL), + UNIQUE KEY ux_items_safe_nr (safe_nr) ) ENGINE=InnoDB; CREATE UNIQUE INDEX ux_items_safe_nr_not_null