From dbcb436c9ff7a028241b10324b1ff892b46ab7f5 Mon Sep 17 00:00:00 2001 From: azures04 Date: Fri, 23 Jan 2026 23:07:10 +0100 Subject: [PATCH] Refactor skin selection logic and remove DB trigger Removed the 'unique_active_skin' database trigger from setupDatabase and updated setSkin in userRepository to handle skin selection logic in application code. This change centralizes the logic for ensuring only one active skin per user, improving maintainability and error handling. --- modules/databaseGlobals.js | 14 -------------- repositories/userRepository.js | 28 +++++++++++++++------------- 2 files changed, 15 insertions(+), 27 deletions(-) diff --git a/modules/databaseGlobals.js b/modules/databaseGlobals.js index 59ec14f..08a56a2 100644 --- a/modules/databaseGlobals.js +++ b/modules/databaseGlobals.js @@ -242,20 +242,6 @@ async function setupDatabase() { logger.log(`defaults skins (steve, alex) ready`, ["MariaDB", "yellow"]) await conn.query(`DROP TRIGGER IF EXISTS unique_active_skin`) - await conn.query(` - CREATE TRIGGER unique_active_skin - AFTER UPDATE ON playersSkins - FOR EACH ROW - BEGIN - IF NEW.isSelected = 1 THEN - UPDATE playersSkins - SET isSelected = 0 - WHERE playerUuid = NEW.playerUuid - AND assetHash != NEW.assetHash; - END IF; - END; - `) - logger.log(`${"unique_active_skin".bold} trigger ready`, ["MariaDB", "yellow"]) await conn.query(`DROP TRIGGER IF EXISTS unique_active_cape`) diff --git a/repositories/userRepository.js b/repositories/userRepository.js index 7b47005..bf0f825 100644 --- a/repositories/userRepository.js +++ b/repositories/userRepository.js @@ -656,19 +656,21 @@ async function getNameHistory(uuid) { } async function setSkin(uuid, hash, variant) { - const insertSql = ` - INSERT INTO playersSkins (playerUuid, assetHash, variant, isSelected) - VALUES (?, ?, ?, 1) - ON DUPLICATE KEY UPDATE isSelected = 1, variant = ? - ` - await database.query(insertSql, [uuid, hash, variant, variant]) - const updateSql = ` - UPDATE playersSkins - SET isSelected = 0 - WHERE playerUuid = ? AND assetHash != ? - ` - await database.query(updateSql, [uuid, hash]) - return true + try { + const resetSql = `UPDATE playersSkins SET isSelected = 0 WHERE playerUuid = ?` + await database.query(resetSql, [uuid]) + + const upsertSql = ` + INSERT INTO playersSkins (playerUuid, assetHash, variant, isSelected) + VALUES (?, ?, ?, 1) + ON DUPLICATE KEY UPDATE isSelected = 1, variant = VALUES(variant) + ` + await database.query(upsertSql, [uuid, hash, variant.toLowerCase()]) + + return true + } catch (error) { + return utils.handleDBError(error) + } } async function updatePassword(uuid, hashedPassword) {