From c6afafca2ab36fc5a0c4aa96bef6100bf0a6b32a Mon Sep 17 00:00:00 2001 From: azures04 Date: Sun, 18 Jan 2026 15:40:00 +0100 Subject: [PATCH] Refactor cape selection logic and remove trigger Removed the 'unique_active_cape' database trigger and updated the showCape function to manually ensure only one cape is selected per player. This change centralizes the selection logic in application code for better maintainability and error handling. --- modules/databaseGlobals.js | 14 -------------- repositories/userRepository.js | 20 ++++++++++++-------- 2 files changed, 12 insertions(+), 22 deletions(-) diff --git a/modules/databaseGlobals.js b/modules/databaseGlobals.js index 27f93af..ca9cb98 100644 --- a/modules/databaseGlobals.js +++ b/modules/databaseGlobals.js @@ -258,20 +258,6 @@ async function setupDatabase() { logger.log(`${"unique_active_skin".bold} trigger ready`, ["MariaDB", "yellow"]) await conn.query(`DROP TRIGGER IF EXISTS unique_active_cape`) - await conn.query(` - CREATE TRIGGER unique_active_cape - AFTER UPDATE ON playersCapes - FOR EACH ROW - BEGIN - IF NEW.isSelected = 1 THEN - UPDATE playersCapes - SET isSelected = 0 - WHERE playerUuid = NEW.playerUuid - AND id != NEW.id; - END IF; - END; - `) - logger.log(`${"unique_active_cape".bold} trigger ready`, ["MariaDB", "yellow"]) await conn.query(`DROP TRIGGER IF EXISTS auto_assign_random_default_skin`) await conn.query(` diff --git a/repositories/userRepository.js b/repositories/userRepository.js index 8e2d631..557d79d 100644 --- a/repositories/userRepository.js +++ b/repositories/userRepository.js @@ -416,15 +416,19 @@ async function hideCape(uuid) { async function showCape(uuid, hash) { try { - const sql = ` - UPDATE playersCapes - SET isSelected = (assetHash = ?) - WHERE playerUuid = ? - ` - const result = await database.query(sql, [hash, uuid]) - return { code: 200, changed: result.affectedRows > 0 } + await database.query( + "UPDATE playersCapes SET isSelected = 0 WHERE playerUuid = ?", + [uuid] + ) + + const [res] = await database.query( + "UPDATE playersCapes SET isSelected = 1 WHERE playerUuid = ? AND assetHash = ?", + [uuid, hash] + ) + + return { code: 200, changed: res.affectedRows > 0 } } catch (error) { - logger.log("Internal Server Error".bold + " : " + error.toString(), ["MariaDB", "yellow"]) + logger.log("Database Error: " + error.toString(), ["MariaDB", "red"]) throw new DefaultError(500, "Internal Server Error", "Database Error") } }