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.
This commit is contained in:
parent
aea0b7b016
commit
dbcb436c9f
@ -242,20 +242,6 @@ async function setupDatabase() {
|
|||||||
logger.log(`defaults skins (steve, alex) ready`, ["MariaDB", "yellow"])
|
logger.log(`defaults skins (steve, alex) ready`, ["MariaDB", "yellow"])
|
||||||
|
|
||||||
await conn.query(`DROP TRIGGER IF EXISTS unique_active_skin`)
|
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`)
|
await conn.query(`DROP TRIGGER IF EXISTS unique_active_cape`)
|
||||||
|
|
||||||
|
|||||||
@ -656,19 +656,21 @@ async function getNameHistory(uuid) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function setSkin(uuid, hash, variant) {
|
async function setSkin(uuid, hash, variant) {
|
||||||
const insertSql = `
|
try {
|
||||||
INSERT INTO playersSkins (playerUuid, assetHash, variant, isSelected)
|
const resetSql = `UPDATE playersSkins SET isSelected = 0 WHERE playerUuid = ?`
|
||||||
VALUES (?, ?, ?, 1)
|
await database.query(resetSql, [uuid])
|
||||||
ON DUPLICATE KEY UPDATE isSelected = 1, variant = ?
|
|
||||||
`
|
const upsertSql = `
|
||||||
await database.query(insertSql, [uuid, hash, variant, variant])
|
INSERT INTO playersSkins (playerUuid, assetHash, variant, isSelected)
|
||||||
const updateSql = `
|
VALUES (?, ?, ?, 1)
|
||||||
UPDATE playersSkins
|
ON DUPLICATE KEY UPDATE isSelected = 1, variant = VALUES(variant)
|
||||||
SET isSelected = 0
|
`
|
||||||
WHERE playerUuid = ? AND assetHash != ?
|
await database.query(upsertSql, [uuid, hash, variant.toLowerCase()])
|
||||||
`
|
|
||||||
await database.query(updateSql, [uuid, hash])
|
return true
|
||||||
return true
|
} catch (error) {
|
||||||
|
return utils.handleDBError(error)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function updatePassword(uuid, hashedPassword) {
|
async function updatePassword(uuid, hashedPassword) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user