Add DDL-based DB init and bootstrap

Add bootstrap entrypoint and migrate DB schema setup to SQL files. Introduces bootstrap.js, many data/ddl/*.sql files, and a new runDDL() in modules/database.js (exports pool and runDDL). Remove legacy modules/databaseGlobals.js. Update repositories and code to use database.pool.query calls. Bump package version and set main to bootstrap.js. Clean up server.js to remove inline DB/cert init (now handled by bootstrap). Overall: refactor DB initialization to run ordered SQL DDL files and centralize startup logic.
This commit is contained in:
2026-09-06 23:52:25 +02:00
parent 93892197ad
commit 87407fe604
40 changed files with 405 additions and 485 deletions
+9 -9
View File
@@ -5,7 +5,7 @@ const { DefaultError } = require("../errors/errors")
async function getAdminById(id) {
try {
const sql = "SELECT id, username, createdAt FROM apiAdministrators WHERE id = ?"
const rows = await database.query(sql, [id])
const rows = await database.pool.query(sql, [id])
return rows[0] || null
} catch (error) {
return utils.handleDBError(error)
@@ -15,7 +15,7 @@ async function getAdminById(id) {
async function createAdmin(username, hashedPassword) {
try {
const sql = "INSERT INTO apiAdministrators (username, password) VALUES (?, ?)"
const result = await database.query(sql, [username, hashedPassword])
const result = await database.pool.query(sql, [username, hashedPassword])
if (result.affectedRows > 0) {
return { code: 200, id: result.insertId, username }
@@ -37,7 +37,7 @@ async function hasPermission(adminId, permissionKey) {
FROM apiAdministratorsPermissions
WHERE administratorId = ? AND permissionKey = ?
`
const rows = await database.query(sql, [adminId, permissionKey])
const rows = await database.pool.query(sql, [adminId, permissionKey])
return rows[0].count === 1
} catch (error) {
return utils.handleDBError(error)
@@ -47,7 +47,7 @@ async function hasPermission(adminId, permissionKey) {
async function assignPermission(adminId, permissionKey) {
try {
const sql = "INSERT INTO apiAdministratorsPermissions (administratorId, permissionKey) VALUES (?, ?)"
const result = await database.query(sql, [adminId, permissionKey])
const result = await database.pool.query(sql, [adminId, permissionKey])
return result.affectedRows > 0
} catch (error) {
@@ -59,7 +59,7 @@ async function assignPermission(adminId, permissionKey) {
async function revokePermission(adminId, permissionKey) {
try {
const sql = "DELETE FROM apiAdministratorsPermissions WHERE administratorId = ? AND permissionKey = ?"
const result = await database.query(sql, [adminId, permissionKey])
const result = await database.pool.query(sql, [adminId, permissionKey])
return result.affectedRows > 0
} catch (error) {
@@ -74,7 +74,7 @@ async function getAdminPermissions(adminId) {
FROM apiAdministratorsPermissions
WHERE administratorId = ?
`
const rows = await database.query(sql, [adminId])
const rows = await database.pool.query(sql, [adminId])
return rows.map(r => r.permissionKey)
} catch (error) {
return utils.handleDBError(error)
@@ -84,7 +84,7 @@ async function getAdminPermissions(adminId) {
async function updateAdminPassword(adminId, newHashedPassword) {
try {
const sql = "UPDATE apiAdministrators SET password = ? WHERE id = ?"
const result = await database.query(sql, [newHashedPassword, adminId])
const result = await database.pool.query(sql, [newHashedPassword, adminId])
if (result.affectedRows > 0) {
return {
@@ -102,7 +102,7 @@ async function updateAdminPassword(adminId, newHashedPassword) {
async function getAdminByUsername(username) {
try {
const sql = "SELECT id, username, password, createdAt FROM apiAdministrators WHERE username = ?"
const rows = await database.query(sql, [username])
const rows = await database.pool.query(sql, [username])
return rows[0] || null
} catch (error) {
@@ -114,7 +114,7 @@ async function addPlayerAction(playerUuid, actionCode) {
try {
const cleanUuid = playerUuid.replace(/-/g, "")
const sql = "INSERT IGNORE INTO playerProfileActions (uuid, action) VALUES (?, ?)"
const result = await database.query(sql, [cleanUuid, actionCode])
const result = await database.pool.query(sql, [cleanUuid, actionCode])
return {
code: 200,
+10 -10
View File
@@ -6,7 +6,7 @@ const { DefaultError } = require("../errors/errors")
async function getUser(identifier, requirePassword = false) {
try {
const sql = `SELECT * FROM players WHERE uuid = ? OR email = ? OR username = ?`
const rows = await database.query(sql, [identifier, identifier, identifier])
const rows = await database.pool.query(sql, [identifier, identifier, identifier])
const user = rows[0]
if (!user) {
throw new DefaultError(404, "User not found")
@@ -28,7 +28,7 @@ async function register(email, username, password) {
const sql = `INSERT INTO players (email, username, password, uuid) VALUES (?, ?, ?, ?)`
const uuid = crypto.randomUUID()
const hashedPassword = await bcrypt.hash(password, 10)
const result = await database.query(sql, [email, username, hashedPassword, uuid])
const result = await database.pool.query(sql, [email, username, hashedPassword, uuid])
if (result.affectedRows > 0) {
return { code: 200, email, username, uuid }
} else {
@@ -42,7 +42,7 @@ async function register(email, username, password) {
async function insertClientSession(accessToken, clientToken, uuid) {
try {
const sql = `INSERT INTO clientSessions (accessToken, clientToken, uuid) VALUES (?, ?, ?)`
const result = await database.query(sql, [accessToken, clientToken, uuid])
const result = await database.pool.query(sql, [accessToken, clientToken, uuid])
if (result.affectedRows > 0) {
return { code: 204, accessToken, clientToken }
@@ -57,7 +57,7 @@ async function insertClientSession(accessToken, clientToken, uuid) {
async function getPlayerProperties(uuid) {
try {
const sql = `SELECT * FROM playersProperties WHERE uuid = ?`
const properties = await database.query(sql, [uuid])
const properties = await database.pool.query(sql, [uuid])
if (properties.length === 0) {
throw new DefaultError(404, "Properties not found for this user.", "InternalServerError")
@@ -71,7 +71,7 @@ async function getPlayerProperties(uuid) {
async function getClientSession(accessToken, clientToken) {
try {
const sql = `SELECT * FROM clientSessions WHERE accessToken = ? AND clientToken = ?`
const rows = await database.query(sql, [accessToken, clientToken])
const rows = await database.pool.query(sql, [accessToken, clientToken])
const session = rows[0]
if (session) {
@@ -90,7 +90,7 @@ async function getClientSession(accessToken, clientToken) {
async function validateClientSession(accessToken, clientToken) {
try {
const sql = `SELECT * FROM clientSessions WHERE accessToken = ? AND clientToken = ?`
const rows = await database.query(sql, [accessToken, clientToken])
const rows = await database.pool.query(sql, [accessToken, clientToken])
const session = rows[0]
if (session) {
@@ -109,7 +109,7 @@ async function validateClientSession(accessToken, clientToken) {
async function validateClientSessionWithoutClientToken(accessToken) {
try {
const sql = `SELECT * FROM clientSessions WHERE accessToken = ?`
const rows = await database.query(sql, [accessToken])
const rows = await database.pool.query(sql, [accessToken])
const session = rows[0]
if (session) {
@@ -128,7 +128,7 @@ async function validateClientSessionWithoutClientToken(accessToken) {
async function invalidateClientSession(accessToken, clientToken) {
try {
const sql = `DELETE FROM clientSessions WHERE accessToken = ? AND clientToken = ?`
const result = await database.query(sql, [accessToken, clientToken])
const result = await database.pool.query(sql, [accessToken, clientToken])
if (result.affectedRows > 0) {
return {
@@ -146,7 +146,7 @@ async function invalidateClientSession(accessToken, clientToken) {
async function revokeAccessTokens(uuid) {
try {
const sql = `DELETE FROM clientSessions WHERE uuid = ?`
const result = await database.query(sql, [uuid])
const result = await database.pool.query(sql, [uuid])
if (result.affectedRows > 0) {
return {
@@ -163,7 +163,7 @@ async function revokeAccessTokens(uuid) {
async function getUsernamesRules() {
try {
const rows = await database.query("SELECT rule, type FROM usernameRules")
const rows = await database.pool.query("SELECT rule, type FROM usernameRules")
return rows.map(row => {
if (row.type === 1) {
return { type: "regex", pattern: new RegExp(row.rule, "i") }
+4 -4
View File
@@ -8,7 +8,7 @@ async function createLinkAttempt(OAuth2LinkId, playerUuid) {
VALUES (?, ?)
ON DUPLICATE KEY UPDATE playerUuid = VALUES(playerUuid), createdAt = NOW()
`
const result = await database.query(sql, [OAuth2LinkId, playerUuid])
const result = await database.pool.query(sql, [OAuth2LinkId, playerUuid])
return result.affectedRows > 0
} catch (error) {
return utils.handleDBError(error)
@@ -18,14 +18,14 @@ async function createLinkAttempt(OAuth2LinkId, playerUuid) {
async function popLinkAttempt(OAuth2LinkId) {
try {
const selectSql = "SELECT playerUuid FROM oaauth2LinkAttempts WHERE OAuth2LinkId = ?"
const rows = await database.query(selectSql, [OAuth2LinkId])
const rows = await database.pool.query(selectSql, [OAuth2LinkId])
if (rows.length === 0) return null
const playerUuid = rows[0].playerUuid
const deleteSql = "DELETE FROM oaauth2LinkAttempts WHERE OAuth2LinkId = ?"
await database.query(deleteSql, [OAuth2LinkId])
await database.pool.query(deleteSql, [OAuth2LinkId])
return playerUuid
} catch (error) {
@@ -36,7 +36,7 @@ async function popLinkAttempt(OAuth2LinkId) {
async function unlinkProviderAccount(provider, playerUuid) {
try {
const sql = `DELETE FROM playersProperties WHERE name = '${provider}Id' AND uuid = ?`
const result = await database.query(sql, [playerUuid])
const result = await database.pool.query(sql, [playerUuid])
return result.affectedRows > 0
} catch (error) {
+9 -9
View File
@@ -4,10 +4,10 @@ const { DefaultError } = require("../errors/errors")
async function insertLegacyClientSessions(sessionId, uuid) {
try {
await database.query(`DELETE FROM legacyClientSessions WHERE uuid = ?`, [uuid])
await database.pool.query(`DELETE FROM legacyClientSessions WHERE uuid = ?`, [uuid])
const sql = `INSERT INTO legacyClientSessions (sessionId, uuid) VALUES (?, ?)`
const result = await database.query(sql, [sessionId, uuid])
const result = await database.pool.query(sql, [sessionId, uuid])
if (result.affectedRows > 0) {
return { code: 200, sessionId, uuid }
@@ -22,7 +22,7 @@ async function insertLegacyClientSessions(sessionId, uuid) {
async function validateLegacyClientSession(sessionId, uuid) {
try {
const sql = `SELECT * FROM legacyClientSessions WHERE sessionId = ? AND uuid = ?`
const rows = await database.query(sql, [sessionId, uuid])
const rows = await database.pool.query(sql, [sessionId, uuid])
const session = rows[0]
if (session) {
@@ -44,7 +44,7 @@ async function validateLegacyClientSession(sessionId, uuid) {
async function getBlockedServers() {
try {
const sql = `SELECT * FROM blockedServers`
const blockedServers = await database.query(sql)
const blockedServers = await database.pool.query(sql)
return {
code: 200,
@@ -63,7 +63,7 @@ async function getActiveSkin(uuid) {
JOIN textures t ON ps.assetHash = t.hash
WHERE ps.playerUuid = ? AND ps.isSelected = 1
`
const rows = await database.query(sql, [uuid])
const rows = await database.pool.query(sql, [uuid])
const skin = rows[0]
if (!skin) {
throw new DefaultError(404, "Not found", "Not found")
@@ -82,7 +82,7 @@ async function getActiveCape(uuid) {
JOIN textures t ON pc.assetHash = t.hash
WHERE pc.playerUuid = ? AND pc.isSelected = 1
`
const rows = await database.query(sql, [uuid])
const rows = await database.pool.query(sql, [uuid])
const cape = rows[0]
if (!cape) {
throw new DefaultError(404, "Not found", "Not found")
@@ -97,7 +97,7 @@ async function getProfileActionsList(uuid) {
try {
const cleanUuid = uuid.replace(/-/g, "")
const sql = "SELECT action FROM playerProfileActions WHERE uuid = ?"
const rows = await database.query(sql, [cleanUuid])
const rows = await database.pool.query(sql, [cleanUuid])
const actions = rows.map(row => row.action)
@@ -118,7 +118,7 @@ async function saveServerSession(uuid, accessToken, serverId, ip) {
ip = VALUES(ip),
createdAt = CURRENT_TIMESTAMP
`
const result = await database.query(sql, [uuid, accessToken, serverId, ip])
const result = await database.pool.query(sql, [uuid, accessToken, serverId, ip])
return { code: 200, success: result.affectedRows > 0 }
} catch (error) {
@@ -134,7 +134,7 @@ async function getServerSession(uuid, serverId) {
WHERE uuid = ? AND serverId = ?
AND createdAt > (NOW() - INTERVAL 30 SECOND)
`
const rows = await database.query(sql, [uuid, serverId])
const rows = await database.pool.query(sql, [uuid, serverId])
const session = rows[0]
if (!session) {
+53 -53
View File
@@ -11,7 +11,7 @@ async function getSkins(uuid) {
JOIN textures t ON ps.assetHash = t.hash
WHERE ps.playerUuid = ?
`
const rows = await database.query(sql, [uuid])
const rows = await database.pool.query(sql, [uuid])
return rows
} catch (error) {
return utils.handleDBError(error)
@@ -26,7 +26,7 @@ async function getCapes(uuid) {
JOIN textures t ON pc.assetHash = t.hash
WHERE pc.playerUuid = ?
`
const rows = await database.query(sql, [uuid])
const rows = await database.pool.query(sql, [uuid])
return rows
} catch (error) {
return utils.handleDBError(error)
@@ -40,7 +40,7 @@ async function addPropertyToPlayer(key, value, uuid) {
VALUES (?, ?, ?)
ON DUPLICATE KEY UPDATE value = VALUES(value)
`
const result = await database.query(sql, [key, value, uuid])
const result = await database.pool.query(sql, [key, value, uuid])
if (result.affectedRows > 0) {
return { code: 200, key, value, uuid }
@@ -55,7 +55,7 @@ async function addPropertyToPlayer(key, value, uuid) {
async function deletePropertyToPlayer(key, uuid) {
try {
const sql = `DELETE FROM playersProperties WHERE name = ? AND uuid = ?`
const result = await database.query(sql, [key, uuid])
const result = await database.pool.query(sql, [key, uuid])
if (result.affectedRows > 0) {
return { code: 200, key, uuid }
@@ -70,7 +70,7 @@ async function deletePropertyToPlayer(key, uuid) {
async function updatePropertyToPlayer(key, value, uuid) {
try {
const sql = `UPDATE playersProperties SET value = ? WHERE name = ? AND uuid = ?`
const result = await database.query(sql, [value, key, uuid])
const result = await database.pool.query(sql, [value, key, uuid])
if (result.affectedRows > 0) {
return { code: 200, key, value, uuid }
} else {
@@ -84,7 +84,7 @@ async function updatePropertyToPlayer(key, value, uuid) {
async function getPlayerProperties(uuid) {
try {
const sql = `SELECT * FROM playersProperties WHERE uuid = ?`
const rows = await database.query(sql, [uuid])
const rows = await database.pool.query(sql, [uuid])
if (rows.length === 0) {
throw new DefaultError(404, "Properties not found for this user")
}
@@ -100,7 +100,7 @@ async function getPlayerProperties(uuid) {
async function getPlayerProperty(key, uuid) {
try {
const sql = `SELECT * FROM playersProperties WHERE name = ? AND uuid = ?`
const rows = await database.query(sql, [key, uuid])
const rows = await database.pool.query(sql, [key, uuid])
const property = rows[0]
if (!property) {
throw new DefaultError(404, "Property not found for this user/key combination")
@@ -114,7 +114,7 @@ async function getPlayerProperty(key, uuid) {
async function getPlayerPropertyByValue(key, value) {
try {
const sql = `SELECT * FROM playersProperties WHERE name = ? AND value = ?`
const rows = await database.query(sql, [key, value])
const rows = await database.pool.query(sql, [key, value])
const property = rows[0]
if (!property) {
@@ -140,8 +140,8 @@ async function getPlayerSettingsSchema() {
preferences: {}
}
try {
const privilegesRows = await database.query("DESCRIBE playersPrivileges")
const preferencesRows = await database.query("DESCRIBE playersPreferences")
const privilegesRows = await database.pool.query("DESCRIBE playersPrivileges")
const preferencesRows = await database.pool.query("DESCRIBE playersPreferences")
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
@@ -160,7 +160,7 @@ async function updatePlayerPreferences(uuid, updates) {
const sql = `UPDATE playersPreferences SET ${setClause} WHERE uuid = ?`
const values = keys.map(key => updates[key])
values.push(uuid)
const result = await database.query(sql, values)
const result = await database.pool.query(sql, values)
if (result.affectedRows > 0) {
return {
code: 200,
@@ -177,7 +177,7 @@ async function updatePlayerPreferences(uuid, updates) {
async function getPlayerPreferences(uuid) {
try {
const sql = `SELECT profanityFilter FROM playersPreferences WHERE uuid = ?`
const rows = await database.query(sql, [uuid])
const rows = await database.pool.query(sql, [uuid])
const data = rows[0]
if (data) {
@@ -201,7 +201,7 @@ async function getPlayerPrivileges(uuid) {
FROM playersPrivileges
WHERE uuid = ?
`
const rows = await database.query(sql, [uuid])
const rows = await database.pool.query(sql, [uuid])
const data = rows[0]
if (data) {
return {
@@ -227,7 +227,7 @@ async function updatePlayerPrivileges(uuid, updates) {
const sql = `UPDATE playersPrivileges SET ${setClause} WHERE uuid = ?`
const values = keys.map(key => updates[key])
values.push(uuid)
const result = await database.query(sql, values)
const result = await database.pool.query(sql, values)
if (result.affectedRows > 0) {
return {
code: 200,
@@ -248,11 +248,11 @@ async function banUser(uuid, { reasonKey, reasonMessage, expires = null }) {
}
let reasonId
const reasonRows = await database.query("SELECT id FROM banReasons WHERE reasonKey = ?", [reasonKey])
const reasonRows = await database.pool.query("SELECT id FROM banReasons WHERE reasonKey = ?", [reasonKey])
if (reasonRows.length > 0) {
reasonId = reasonRows[0].id
} else {
const insertReason = await database.query("INSERT INTO banReasons (reasonKey) VALUES (?)", [reasonKey])
const insertReason = await database.pool.query("INSERT INTO banReasons (reasonKey) VALUES (?)", [reasonKey])
reasonId = insertReason.insertId
}
@@ -261,7 +261,7 @@ async function banUser(uuid, { reasonKey, reasonMessage, expires = null }) {
INSERT INTO bans (banId, uuid, reason, reasonMessage, expires)
VALUES (?, ?, ?, ?, ?)
`
const result = await database.query(insertSql, [banId, uuid, reasonId, reasonMessage || "Banned by operator", expires])
const result = await database.pool.query(insertSql, [banId, uuid, reasonId, reasonMessage || "Banned by operator", expires])
if (result.affectedRows > 0) {
return {
@@ -288,7 +288,7 @@ async function unbanUser(uuid) {
throw new DefaultError(400, "Missing uuid.")
}
const sql = "DELETE FROM bans WHERE uuid = ?"
const result = await database.query(sql, [uuid])
const result = await database.pool.query(sql, [uuid])
if (result.affectedRows > 0) {
return {
code: 200,
@@ -317,7 +317,7 @@ async function getPlayerBans(uuid) {
WHERE b.uuid = ?
ORDER BY b.expires ASC
`
const rows = await database.query(sql, [uuid])
const rows = await database.pool.query(sql, [uuid])
if (rows.length > 0) {
return { code: 200, bans: rows }
@@ -332,7 +332,7 @@ async function getPlayerBans(uuid) {
async function changeUsername(uuid, newName) {
try {
const sql = "UPDATE players SET username = ? WHERE uuid = ?"
const result = await database.query(sql, [newName, uuid])
const result = await database.pool.query(sql, [newName, uuid])
if (result.affectedRows > 0) {
return { code: 200, message: "Username changed successfully" }
} else {
@@ -353,7 +353,7 @@ async function createTexture(uuid, hash, type, url, alias) {
INSERT INTO textures (uuid, hash, type, url, alias)
VALUES (?, ?, ?, ?, ?)
`
await database.query(sql, [uuid, hash, type, url, alias])
await database.pool.query(sql, [uuid, hash, type, url, alias])
return true
} catch (error) {
if (error.code === 'ER_DUP_ENTRY') {
@@ -367,7 +367,7 @@ async function createTexture(uuid, hash, type, url, alias) {
async function getTextureByUuid(textureUuid) {
try {
const sql = "SELECT hash FROM textures WHERE uuid = ?"
const rows = await database.query(sql, [textureUuid])
const rows = await database.pool.query(sql, [textureUuid])
return rows[0] || null
} catch (error) {
return utils.handleDBError(error)
@@ -377,7 +377,7 @@ async function getTextureByUuid(textureUuid) {
async function getTextureByHash(hash) {
try {
const sql = "SELECT uuid FROM textures WHERE hash = ?"
const rows = await database.query(sql, [hash])
const rows = await database.pool.query(sql, [hash])
return rows[0]
} catch (error) {
return utils.handleDBError(error)
@@ -390,13 +390,13 @@ async function resetSkin(uuid, hash, variant) {
INSERT IGNORE INTO playersSkins (playerUuid, assetHash, variant, isSelected)
VALUES (?, ?, ?, 0)
`
await database.query(insertSql, [uuid, hash, variant])
await database.pool.query(insertSql, [uuid, hash, variant])
const updateSql = `
UPDATE playersSkins
SET isSelected = (assetHash = ?)
WHERE playerUuid = ?
`
await database.query(updateSql, [hash, uuid])
await database.pool.query(updateSql, [hash, uuid])
return { code: 200 }
} catch (error) {
return utils.handleDBError(error)
@@ -406,7 +406,7 @@ async function resetSkin(uuid, hash, variant) {
async function hideCape(uuid) {
try {
const sql = "UPDATE playersCapes SET isSelected = 0 WHERE playerUuid = ?"
await database.query(sql, [uuid])
await database.pool.query(sql, [uuid])
return { code: 200 }
} catch (error) {
return utils.handleDBError(error)
@@ -415,12 +415,12 @@ async function hideCape(uuid) {
async function showCape(uuid, hash) {
try {
await database.query(
await database.pool.query(
"UPDATE playersCapes SET isSelected = 0 WHERE playerUuid = ?",
[uuid]
)
const result = await database.query(
const result = await database.pool.query(
"UPDATE playersCapes SET isSelected = 1 WHERE playerUuid = ? AND assetHash = ?",
[uuid, hash]
)
@@ -436,7 +436,7 @@ async function showCape(uuid, hash) {
async function checkCapeOwnership(uuid, hash) {
try {
const sql = "SELECT 1 FROM playersCapes WHERE playerUuid = ? AND assetHash = ?"
const rows = await database.query(sql, [uuid, hash])
const rows = await database.pool.query(sql, [uuid, hash])
return rows.length > 0
} catch (error) {
return utils.handleDBError(error)
@@ -446,7 +446,7 @@ async function checkCapeOwnership(uuid, hash) {
async function getPlayerMeta(uuid) {
try {
const sql = `SELECT createdAt, nameChangeAllowed FROM players WHERE uuid = ?`
const rows = await database.query(sql, [uuid])
const rows = await database.pool.query(sql, [uuid])
return rows[0]
} catch (error) {
return utils.handleDBError(error)
@@ -462,7 +462,7 @@ async function getLastNameChange(uuid) {
ORDER BY changedAt DESC
LIMIT 1
`
const rows = await database.query(sql, [uuid])
const rows = await database.pool.query(sql, [uuid])
return rows[0]
} catch (error) {
return utils.handleDBError(error)
@@ -472,7 +472,7 @@ async function getLastNameChange(uuid) {
async function getPlayerCertificate(uuid) {
try {
const sql = "SELECT * FROM playerCertificates WHERE uuid = ?"
const rows = await database.query(sql, [uuid])
const rows = await database.pool.query(sql, [uuid])
return rows[0]
} catch (error) {
return utils.handleDBError(error)
@@ -486,7 +486,7 @@ async function savePlayerCertificate(uuid, privateKey, publicKey, signatureV2, e
(uuid, privateKey, publicKey, publicKeySignatureV2, expiresAt, refreshedAfter)
VALUES (?, ?, ?, ?, ?, ?)
`
const result = await database.query(sql, [uuid, privateKey, publicKey, signatureV2, expiresAt, refreshedAfter])
const result = await database.pool.query(sql, [uuid, privateKey, publicKey, signatureV2, expiresAt, refreshedAfter])
return result.affectedRows > 0
} catch (error) {
return utils.handleDBError(error)
@@ -496,7 +496,7 @@ async function savePlayerCertificate(uuid, privateKey, publicKey, signatureV2, e
async function deleteExpiredCertificates(isoDate) {
try {
const sql = "DELETE FROM playerCertificates WHERE expiresAt < ?"
const result = await database.query(sql, [isoDate])
const result = await database.pool.query(sql, [isoDate])
return result.affectedRows
} catch (error) {
return utils.handleDBError(error)
@@ -507,7 +507,7 @@ async function addProfileAction(uuid, actionCode) {
try {
const cleanUuid = uuid.replace(/-/g, "")
const sql = "INSERT IGNORE INTO playerProfileActions (uuid, action) VALUES (?, ?)"
const result = await database.query(sql, [cleanUuid, actionCode])
const result = await database.pool.query(sql, [cleanUuid, actionCode])
return result.affectedRows > 0
} catch (error) {
return utils.handleDBError(error)
@@ -518,7 +518,7 @@ async function removeProfileAction(uuid, actionCode) {
try {
const cleanUuid = uuid.replace(/-/g, "")
const sql = "DELETE FROM playerProfileActions WHERE uuid = ? AND action = ?"
const result = await database.query(sql, [cleanUuid, actionCode])
const result = await database.pool.query(sql, [cleanUuid, actionCode])
return result.affectedRows
} catch (error) {
return utils.handleDBError(error)
@@ -529,7 +529,7 @@ async function getPlayerActions(uuid) {
try {
const cleanUuid = uuid.replace(/-/g, "")
const sql = "SELECT action FROM playerProfileActions WHERE uuid = ?"
const rows = await database.query(sql, [cleanUuid])
const rows = await database.pool.query(sql, [cleanUuid])
return rows.map(r => r.action)
} catch (error) {
return utils.handleDBError(error)
@@ -540,7 +540,7 @@ async function clearAllPlayerActions(uuid) {
try {
const cleanUuid = uuid.replace(/-/g, "")
const sql = "DELETE FROM playerProfileActions WHERE uuid = ?"
const result = await database.query(sql, [cleanUuid])
const result = await database.pool.query(sql, [cleanUuid])
return result.affectedRows
} catch (error) {
return utils.handleDBError(error)
@@ -550,7 +550,7 @@ async function clearAllPlayerActions(uuid) {
async function blockPlayer(blockerUuid, blockedUuid) {
try {
const sql = `INSERT IGNORE INTO playersBlockslist (blockerUuid, blockedUuid) VALUES (?, ?)`
const result = await database.query(sql, [blockerUuid, blockedUuid])
const result = await database.pool.query(sql, [blockerUuid, blockedUuid])
return result.affectedRows > 0
} catch (error) {
return utils.handleDBError(error)
@@ -560,7 +560,7 @@ async function blockPlayer(blockerUuid, blockedUuid) {
async function unblockPlayer(blockerUuid, blockedUuid) {
try {
const sql = `DELETE FROM playersBlockslist WHERE blockerUuid = ? AND blockedUuid = ?`
const result = await database.query(sql, [blockerUuid, blockedUuid])
const result = await database.pool.query(sql, [blockerUuid, blockedUuid])
return result.affectedRows > 0
} catch (error) {
return utils.handleDBError(error)
@@ -570,7 +570,7 @@ async function unblockPlayer(blockerUuid, blockedUuid) {
async function getBlockedUuids(blockerUuid) {
try {
const sql = `SELECT blockedUuid FROM playersBlockslist WHERE blockerUuid = ?`
const rows = await database.query(sql, [blockerUuid])
const rows = await database.pool.query(sql, [blockerUuid])
return rows.map(r => r.blockedUuid)
} catch (error) {
return utils.handleDBError(error)
@@ -580,7 +580,7 @@ async function getBlockedUuids(blockerUuid) {
async function isBlocked(blockerUuid, targetUuid) {
try {
const sql = `SELECT 1 FROM playersBlockslist WHERE blockerUuid = ? AND blockedUuid = ? LIMIT 1`
const rows = await database.query(sql, [blockerUuid, targetUuid])
const rows = await database.pool.query(sql, [blockerUuid, targetUuid])
return rows.length > 0
} catch (error) {
return utils.handleDBError(error)
@@ -595,7 +595,7 @@ async function getUsersByNames(usernames) {
const placeholders = uniqueNames.map(() => "?").join(", ")
const sql = `SELECT uuid, username FROM players WHERE username IN (${placeholders})`
const rows = await database.query(sql, uniqueNames)
const rows = await database.pool.query(sql, uniqueNames)
return rows
} catch (error) {
return utils.handleDBError(error)
@@ -605,7 +605,7 @@ async function getUsersByNames(usernames) {
async function getUuidAndUsername(username) {
try {
const sql = "SELECT uuid, username FROM players WHERE username = ?"
const rows = await database.query(sql, [username])
const rows = await database.pool.query(sql, [username])
return rows[0] || null
} catch (error) {
@@ -616,7 +616,7 @@ async function getUuidAndUsername(username) {
async function getProfileByUsername(username) {
try {
const sql = "SELECT uuid, username FROM players WHERE username = ?"
const rows = await database.query(sql, [username])
const rows = await database.pool.query(sql, [username])
return rows[0] || null
} catch (error) {
return utils.handleDBError(error)
@@ -633,7 +633,7 @@ async function getProfileByHistory(username, isoDate) {
ORDER BY changedAt DESC
LIMIT 1
`
const rows = await database.query(sql, [username, isoDate])
const rows = await database.pool.query(sql, [username, isoDate])
return rows[0] || null
} catch (error) {
return utils.handleDBError(error)
@@ -648,7 +648,7 @@ async function getNameHistory(uuid) {
WHERE uuid = ?
ORDER BY changedAt ASC
`
const rows = await database.query(sql, [uuid])
const rows = await database.pool.query(sql, [uuid])
return rows
} catch (error) {
return utils.handleDBError(error)
@@ -658,14 +658,14 @@ async function getNameHistory(uuid) {
async function setSkin(uuid, hash, variant) {
try {
const resetSql = `UPDATE playersSkins SET isSelected = 0 WHERE playerUuid = ?`
await database.query(resetSql, [uuid])
await database.pool.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.toUpperCase()])
await database.pool.query(upsertSql, [uuid, hash, variant.toUpperCase()])
return true
} catch (error) {
@@ -676,7 +676,7 @@ async function setSkin(uuid, hash, variant) {
async function updatePassword(uuid, hashedPassword) {
try {
const sql = "UPDATE players SET password = ? WHERE uuid = ?"
const result = await database.query(sql, [hashedPassword, uuid])
const result = await database.pool.query(sql, [hashedPassword, uuid])
if (result.affectedRows > 0) {
return { code: 200, message: "Password updated successfully" }
@@ -694,7 +694,7 @@ async function addCapeToPlayer(uuid, hash) {
INSERT INTO playersCapes (playerUuid, assetHash, isSelected)
VALUES (?, ?, 0)
`
const result = await database.query(sql, [uuid, hash])
const result = await database.pool.query(sql, [uuid, hash])
if (result.affectedRows > 0) {
return { code: 200, message: "Cape granted to the player." }
@@ -711,7 +711,7 @@ async function addCapeToPlayer(uuid, hash) {
async function removeCapeFromPlayer(uuid, hash) {
try {
const sql = "DELETE FROM playersCapes WHERE playerUuid = ? AND assetHash = ?"
const result = await database.query(sql, [uuid, hash])
const result = await database.pool.query(sql, [uuid, hash])
if (result.affectedRows > 0) {
return { code: 200, message: "Cape removed from player." }
@@ -726,7 +726,7 @@ async function removeCapeFromPlayer(uuid, hash) {
async function deleteTexture(hash) {
try {
const sql = "DELETE FROM textures WHERE hash = ?"
const result = await database.query(sql, [hash])
const result = await database.pool.query(sql, [hash])
return result.affectedRows > 0
} catch (error) {
return utils.handleDBError(error)