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:
@@ -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,
|
||||
|
||||
@@ -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") }
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user