Centralize and standardize database error handling
Introduced a new handleDBError utility in modules/utils.js to centralize database error logging and throwing. Refactored all repositories to use this utility, replacing repetitive error handling and logger calls with a single function call for improved maintainability and consistency.
This commit is contained in:
+46
-101
@@ -1,3 +1,4 @@
|
||||
const utils = require("../modules/utils")
|
||||
const crypto = require("node:crypto")
|
||||
const logger = require("../modules/logger")
|
||||
const database = require("../modules/database")
|
||||
@@ -18,8 +19,7 @@ async function addPropertyToPlayer(key, value, uuid) {
|
||||
throw new DefaultError(500, "Please contact an administrator.", "InternalServerError")
|
||||
}
|
||||
} catch (error) {
|
||||
logger.log("Internal Server Error".bold + " : " + error.toString(), ["MariaDB", "yellow"])
|
||||
throw new DefaultError(500, "Please contact an administrator.", "InternalServerError")
|
||||
return utils.handleDBError(error)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,9 +34,7 @@ async function deletePropertyToPlayer(key, uuid) {
|
||||
throw new DefaultError(500, "Property not found for this user/key combination.")
|
||||
}
|
||||
} catch (error) {
|
||||
if (error instanceof DefaultError) throw error
|
||||
logger.log("Internal Server Error".bold + " : " + error.toString(), ["MariaDB", "yellow"])
|
||||
throw new DefaultError(500, "Please contact an administrator.", "InternalServerError")
|
||||
return utils.handleDBError(error)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -50,9 +48,7 @@ async function updatePropertyToPlayer(key, value, uuid) {
|
||||
throw new DefaultError(404, "Property not found for this user/key combination")
|
||||
}
|
||||
} catch (error) {
|
||||
if (error instanceof DefaultError) throw error
|
||||
logger.log("Internal Server Error".bold + " : " + error.toString(), ["MariaDB", "yellow"])
|
||||
throw new DefaultError(500, "Please contact an administrator.", "InternalServerError")
|
||||
return utils.handleDBError(error)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -68,9 +64,7 @@ async function getPlayerProperties(uuid) {
|
||||
properties: rows.map(property => ({ name: property.name, value: property.value }))
|
||||
}
|
||||
} catch (error) {
|
||||
if (error instanceof DefaultError) throw error
|
||||
logger.log("Internal Server Error".bold + " : " + error.toString(), ["MariaDB", "yellow"])
|
||||
throw new DefaultError(500, "Please contact an administrator.", "InternalServerError")
|
||||
return utils.handleDBError(error)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -84,9 +78,7 @@ async function getPlayerProperty(key, uuid) {
|
||||
}
|
||||
return { code: 200, property }
|
||||
} catch (error) {
|
||||
if (error instanceof DefaultError) throw error
|
||||
logger.log("Internal Server Error".bold + " : " + error.toString(), ["MariaDB", "yellow"])
|
||||
throw new DefaultError(500, "Please contact an administrator.", "InternalServerError")
|
||||
return utils.handleDBError(error)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -109,9 +101,7 @@ async function getPlayerPropertyByValue(key, value) {
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
if (error instanceof DefaultError) throw error
|
||||
logger.log("Internal Server Error".bold + " : " + error.toString(), ["MariaDB", "yellow"])
|
||||
throw new DefaultError(500, "Please contact an administrator.", "InternalServerError")
|
||||
return utils.handleDBError(error)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -126,9 +116,8 @@ async function getPlayerSettingsSchema() {
|
||||
RAW_SCHEMA_CACHE.privileges = privilegesRows.map(c => c.Field).filter(n => n !== "uuid")
|
||||
RAW_SCHEMA_CACHE.preferences = preferencesRows.map(c => c.Field).filter(n => n !== "uuid")
|
||||
return RAW_SCHEMA_CACHE
|
||||
} catch (err) {
|
||||
logger.log("Database Schema Error: " + err.toString(), ["MariaDB", "red"])
|
||||
throw new DefaultError(500, "Internal Server Error", "Database Schema Error")
|
||||
} catch (error) {
|
||||
return utils.handleDBError(error)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -152,9 +141,7 @@ async function updatePlayerPreferences(uuid, updates) {
|
||||
throw new DefaultError(404, "Player preferences not found or no changes made.")
|
||||
}
|
||||
} catch (error) {
|
||||
if (error instanceof DefaultError) throw error
|
||||
logger.log("Internal Server Error".bold + " : " + error.toString(), ["MariaDB", "yellow"])
|
||||
throw new DefaultError(500, "Please contact an administrator.", "InternalServerError")
|
||||
return utils.handleDBError(error)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -174,9 +161,7 @@ async function getPlayerPreferences(uuid) {
|
||||
throw new DefaultError(404, "Preferences not found for this UUID.")
|
||||
}
|
||||
} catch (error) {
|
||||
if (error instanceof DefaultError) throw error
|
||||
logger.log("Internal Server Error".bold + " : " + error.toString(), ["MariaDB", "yellow"])
|
||||
throw new DefaultError(500, "Please contact an administrator.", "InternalServerError")
|
||||
return utils.handleDBError(error)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -199,9 +184,7 @@ async function getPlayerPrivileges(uuid) {
|
||||
throw new DefaultError(404, "Privileges not found for this UUID.")
|
||||
}
|
||||
} catch (error) {
|
||||
if (error instanceof DefaultError) throw error
|
||||
logger.log("Internal Server Error".bold + " : " + error.toString(), ["MariaDB", "yellow"])
|
||||
throw new DefaultError(500, "Please contact an administrator.", "InternalServerError")
|
||||
return utils.handleDBError(error)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -225,9 +208,7 @@ async function updatePlayerPrivileges(uuid, updates) {
|
||||
throw new DefaultError(404, "Player privileges not found or no changes made.")
|
||||
}
|
||||
} catch (error) {
|
||||
if (error instanceof DefaultError) throw error
|
||||
logger.log("Internal Server Error".bold + " : " + error.toString(), ["MariaDB", "yellow"])
|
||||
throw new DefaultError(500, "Please contact an administrator.", "InternalServerError")
|
||||
return utils.handleDBError(error)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -268,8 +249,7 @@ async function banUser(uuid, { reasonKey, reasonMessage, expires = null }) {
|
||||
if (error.code === "ER_NO_REFERENCED_ROW_2" || error.toString().includes("foreign key constraint")) {
|
||||
throw new DefaultError(404, "User not found (cannot ban a ghost).")
|
||||
}
|
||||
logger.log("Internal Server Error".bold + " : " + error.toString(), ["MariaDB", "yellow"])
|
||||
throw new DefaultError(500, "Internal Server Error", error.toString())
|
||||
return utils.handleDBError(error)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -291,9 +271,7 @@ async function unbanUser(uuid) {
|
||||
}
|
||||
|
||||
} catch (error) {
|
||||
if (error instanceof DefaultError) throw error
|
||||
logger.log("Internal Server Error".bold + " : " + error.toString(), ["MariaDB", "yellow"])
|
||||
throw new DefaultError(500, "Please contact an administrator.", "InternalServerError")
|
||||
return utils.handleDBError(error)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -318,9 +296,7 @@ async function getPlayerBans(uuid) {
|
||||
return { code: 204 }
|
||||
}
|
||||
} catch (error) {
|
||||
if (error instanceof DefaultError) throw error
|
||||
logger.log("Internal Server Error".bold + " : " + error.toString(), ["MariaDB", "yellow"])
|
||||
throw new DefaultError(500, "Please contact an administrator.", "InternalServerError")
|
||||
return utils.handleDBError(error)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -338,8 +314,7 @@ async function changeUsername(uuid, newName) {
|
||||
if (error.code === "ER_DUP_ENTRY" || error.errno === 1062) {
|
||||
throw new DefaultError(409, "Username already taken", "ForbiddenOperationException")
|
||||
}
|
||||
logger.log("Internal Server Error".bold + " : " + error.toString(), ["MariaDB", "yellow"])
|
||||
throw new DefaultError(500, "Internal Server Error", error.toString())
|
||||
return utils.handleDBError(error)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -355,8 +330,7 @@ async function createTexture(uuid, hash, type, url, alias) {
|
||||
if (error.code === 'ER_DUP_ENTRY') {
|
||||
return false
|
||||
}
|
||||
logger.log("Database Error: " + error.toString(), ["MariaDB", "red"])
|
||||
throw new DefaultError(500, "Internal Server Error", "Database Error")
|
||||
return utils.handleDBError(error)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -367,8 +341,7 @@ async function getTextureByUuid(textureUuid) {
|
||||
const rows = await database.query(sql, [textureUuid])
|
||||
return rows[0] || null
|
||||
} catch (error) {
|
||||
logger.log("Internal Server Error".bold + " : " + error.toString(), ["MariaDB", "yellow"])
|
||||
throw new DefaultError(500, "Internal Server Error", "Database Error")
|
||||
return utils.handleDBError(error)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -378,8 +351,7 @@ async function getTextureByHash(hash) {
|
||||
const rows = await database.query(sql, [hash])
|
||||
return rows[0]
|
||||
} catch (error) {
|
||||
logger.log("Database Error: " + error.toString(), ["MariaDB", "red"])
|
||||
throw new DefaultError(500, "Internal Server Error", "Database Error")
|
||||
return utils.handleDBError(error)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -398,8 +370,7 @@ async function resetSkin(uuid, hash, variant) {
|
||||
await database.query(updateSql, [hash, uuid])
|
||||
return { code: 200 }
|
||||
} catch (error) {
|
||||
logger.log("Internal Server Error".bold + " : " + error.toString(), ["MariaDB", "yellow"])
|
||||
throw new DefaultError(500, "Internal Server Error", "Database Error")
|
||||
return utils.handleDBError(error)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -409,8 +380,7 @@ async function hideCape(uuid) {
|
||||
await database.query(sql, [uuid])
|
||||
return { code: 200 }
|
||||
} catch (error) {
|
||||
logger.log("Internal Server Error".bold + " : " + error.toString(), ["MariaDB", "yellow"])
|
||||
throw new DefaultError(500, "Internal Server Error", "Database Error")
|
||||
return utils.handleDBError(error)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -430,8 +400,7 @@ async function showCape(uuid, hash) {
|
||||
|
||||
return { code: 200, changed: affectedRows > 0 }
|
||||
} catch (error) {
|
||||
logger.log("Database Error: " + error.toString(), ["MariaDB", "red"])
|
||||
throw new DefaultError(500, "Internal Server Error", "Database Error")
|
||||
return utils.handleDBError(error)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -441,7 +410,7 @@ async function checkCapeOwnership(uuid, hash) {
|
||||
const rows = await database.query(sql, [uuid, hash])
|
||||
return rows.length > 0
|
||||
} catch (error) {
|
||||
throw new DefaultError(500, "Internal Server Error", "Database Error")
|
||||
return utils.handleDBError(error)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -451,8 +420,7 @@ async function getPlayerMeta(uuid) {
|
||||
const rows = await database.query(sql, [uuid])
|
||||
return rows[0]
|
||||
} catch (error) {
|
||||
logger.log("Database Error: " + error.toString(), ["MariaDB", "red"])
|
||||
throw new DefaultError(500, "Internal Server Error", "Database Error")
|
||||
return utils.handleDBError(error)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -468,8 +436,7 @@ async function getLastNameChange(uuid) {
|
||||
const rows = await database.query(sql, [uuid])
|
||||
return rows[0]
|
||||
} catch (error) {
|
||||
logger.log("Database Error: " + error.toString(), ["MariaDB", "red"])
|
||||
throw new DefaultError(500, "Internal Server Error", "Database Error")
|
||||
return utils.handleDBError(error)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -479,8 +446,7 @@ async function getPlayerCertificate(uuid) {
|
||||
const rows = await database.query(sql, [uuid])
|
||||
return rows[0]
|
||||
} catch (error) {
|
||||
logger.log("Database Error: " + error.toString(), ["MariaDB", "red"])
|
||||
throw new DefaultError(500, "Internal Server Error", "Database Error")
|
||||
return utils.handleDBError(error)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -494,8 +460,7 @@ async function savePlayerCertificate(uuid, privateKey, publicKey, signatureV2, e
|
||||
const result = await database.query(sql, [uuid, privateKey, publicKey, signatureV2, expiresAt, refreshedAfter])
|
||||
return result.affectedRows > 0
|
||||
} catch (error) {
|
||||
logger.log("Database Error: " + error.toString(), ["MariaDB", "red"])
|
||||
throw new DefaultError(500, "Internal Server Error", "Database Error")
|
||||
return utils.handleDBError(error)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -505,8 +470,7 @@ async function deleteExpiredCertificates(isoDate) {
|
||||
const result = await database.query(sql, [isoDate])
|
||||
return result.affectedRows
|
||||
} catch (error) {
|
||||
logger.log("Database Error: " + error.toString(), ["MariaDB", "red"])
|
||||
throw new DefaultError(500, "Internal Server Error", "Database Error")
|
||||
return utils.handleDBError(error)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -517,8 +481,7 @@ async function addProfileAction(uuid, actionCode) {
|
||||
const result = await database.query(sql, [cleanUuid, actionCode])
|
||||
return result.affectedRows > 0
|
||||
} catch (error) {
|
||||
logger.log("Database Error: " + error.toString(), ["MariaDB", "red"])
|
||||
throw new DefaultError(500, "Internal Server Error", "Database Error")
|
||||
return utils.handleDBError(error)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -529,8 +492,7 @@ async function removeProfileAction(uuid, actionCode) {
|
||||
const result = await database.query(sql, [cleanUuid, actionCode])
|
||||
return result.affectedRows
|
||||
} catch (error) {
|
||||
logger.log("Database Error: " + error.toString(), ["MariaDB", "red"])
|
||||
throw new DefaultError(500, "Internal Server Error", "Database Error")
|
||||
return utils.handleDBError(error)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -541,8 +503,7 @@ async function getPlayerActions(uuid) {
|
||||
const rows = await database.query(sql, [cleanUuid])
|
||||
return rows.map(r => r.action)
|
||||
} catch (error) {
|
||||
logger.log("Database Error: " + error.toString(), ["MariaDB", "red"])
|
||||
throw new DefaultError(500, "Internal Server Error", "Database Error")
|
||||
return utils.handleDBError(error)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -553,8 +514,7 @@ async function clearAllPlayerActions(uuid) {
|
||||
const result = await database.query(sql, [cleanUuid])
|
||||
return result.affectedRows
|
||||
} catch (error) {
|
||||
logger.log("Database Error: " + error.toString(), ["MariaDB", "red"])
|
||||
throw new DefaultError(500, "Internal Server Error", "Database Error")
|
||||
return utils.handleDBError(error)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -564,8 +524,7 @@ async function blockPlayer(blockerUuid, blockedUuid) {
|
||||
const result = await database.query(sql, [blockerUuid, blockedUuid])
|
||||
return result.affectedRows > 0
|
||||
} catch (error) {
|
||||
logger.log("Database Error: " + error.toString(), ["MariaDB", "red"])
|
||||
throw new DefaultError(500, "Internal Server Error", "Database Error")
|
||||
return utils.handleDBError(error)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -575,8 +534,7 @@ async function unblockPlayer(blockerUuid, blockedUuid) {
|
||||
const result = await database.query(sql, [blockerUuid, blockedUuid])
|
||||
return result.affectedRows > 0
|
||||
} catch (error) {
|
||||
logger.log("Database Error: " + error.toString(), ["MariaDB", "red"])
|
||||
throw new DefaultError(500, "Internal Server Error", "Database Error")
|
||||
return utils.handleDBError(error)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -586,8 +544,7 @@ async function getBlockedUuids(blockerUuid) {
|
||||
const rows = await database.query(sql, [blockerUuid])
|
||||
return rows.map(r => r.blockedUuid)
|
||||
} catch (error) {
|
||||
logger.log("Database Error: " + error.toString(), ["MariaDB", "red"])
|
||||
throw new DefaultError(500, "Internal Server Error", "Database Error")
|
||||
return utils.handleDBError(error)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -597,8 +554,7 @@ async function isBlocked(blockerUuid, targetUuid) {
|
||||
const rows = await database.query(sql, [blockerUuid, targetUuid])
|
||||
return rows.length > 0
|
||||
} catch (error) {
|
||||
logger.log("Database Error: " + error.toString(), ["MariaDB", "red"])
|
||||
throw new DefaultError(500, "Internal Server Error", "Database Error")
|
||||
return utils.handleDBError(error)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -613,8 +569,7 @@ async function getUsersByNames(usernames) {
|
||||
const rows = await database.query(sql, uniqueNames)
|
||||
return rows
|
||||
} catch (error) {
|
||||
logger.log("Database Error: " + error.toString(), ["MariaDB", "red"])
|
||||
throw new DefaultError(500, "Internal Server Error", "Database Error")
|
||||
return utils.handleDBError(error)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -625,8 +580,7 @@ async function getUuidAndUsername(username) {
|
||||
|
||||
return rows[0] || null
|
||||
} catch (error) {
|
||||
logger.log("Database Error: " + error.toString(), ["MariaDB", "red"])
|
||||
throw new DefaultError(500, "Internal Server Error", "Database Error")
|
||||
return utils.handleDBError(error)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -636,8 +590,7 @@ async function getProfileByUsername(username) {
|
||||
const rows = await database.query(sql, [username])
|
||||
return rows[0] || null
|
||||
} catch (error) {
|
||||
logger.log("Database Error: " + error.toString(), ["MariaDB", "red"])
|
||||
throw new DefaultError(500, "Internal Server Error", "Database Error")
|
||||
return utils.handleDBError(error)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -654,8 +607,7 @@ async function getProfileByHistory(username, isoDate) {
|
||||
const rows = await database.query(sql, [username, isoDate])
|
||||
return rows[0] || null
|
||||
} catch (error) {
|
||||
logger.log("Database Error: " + error.toString(), ["MariaDB", "red"])
|
||||
throw new DefaultError(500, "Internal Server Error", "Database Error")
|
||||
return utils.handleDBError(error)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -670,8 +622,7 @@ async function getNameHistory(uuid) {
|
||||
const rows = await database.query(sql, [uuid])
|
||||
return rows
|
||||
} catch (error) {
|
||||
logger.log("Database Error: " + error.toString(), ["MariaDB", "red"])
|
||||
throw new DefaultError(500, "Internal Server Error", "Database Error")
|
||||
return utils.handleDBError(error)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -702,9 +653,7 @@ async function updatePassword(uuid, hashedPassword) {
|
||||
throw new DefaultError(404, "User not found")
|
||||
}
|
||||
} catch (error) {
|
||||
if (error instanceof DefaultError) throw error
|
||||
logger.log("Internal Server Error".bold + " : " + error.toString(), ["MariaDB", "yellow"])
|
||||
throw new DefaultError(500, "Internal Server Error", "Database Error")
|
||||
return utils.handleDBError(error)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -724,8 +673,7 @@ async function addCapeToPlayer(uuid, hash) {
|
||||
if (error.code === 'ER_DUP_ENTRY') {
|
||||
throw new DefaultError(409, "Le joueur possède déjà cette cape.")
|
||||
}
|
||||
logger.log("Internal Server Error".bold + " : " + error.toString(), ["MariaDB", "yellow"])
|
||||
throw new DefaultError(500, "Internal Server Error", "Database Error")
|
||||
return utils.handleDBError(error)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -740,9 +688,7 @@ async function removeCapeFromPlayer(uuid, hash) {
|
||||
throw new DefaultError(404, "Le joueur ne possède pas cette cape.")
|
||||
}
|
||||
} catch (error) {
|
||||
if (error instanceof DefaultError) throw error
|
||||
logger.log("Internal Server Error".bold + " : " + error.toString(), ["MariaDB", "yellow"])
|
||||
throw new DefaultError(500, "Internal Server Error", "Database Error")
|
||||
return utils.handleDBError(error)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -752,8 +698,7 @@ async function deleteTexture(hash) {
|
||||
const result = await database.query(sql, [hash])
|
||||
return result.affectedRows > 0
|
||||
} catch (error) {
|
||||
logger.log("Internal Server Error".bold + " : " + error.toString(), ["MariaDB", "yellow"])
|
||||
throw new DefaultError(500, "Internal Server Error", "Database Error")
|
||||
return utils.handleDBError(error)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user