139 lines
4.3 KiB
JavaScript
139 lines
4.3 KiB
JavaScript
const utils = require("../modules/utils")
|
|
const database = require("../modules/database")
|
|
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])
|
|
return rows[0] || null
|
|
} catch (error) {
|
|
return utils.handleDBError(error)
|
|
}
|
|
}
|
|
|
|
async function createAdmin(username, hashedPassword) {
|
|
try {
|
|
const sql = "INSERT INTO apiAdministrators (username, password) VALUES (?, ?)"
|
|
const result = await database.query(sql, [username, hashedPassword])
|
|
|
|
if (result.affectedRows > 0) {
|
|
return { code: 200, id: result.insertId, username }
|
|
} else {
|
|
throw new DefaultError(500, "Failed to create administrator.")
|
|
}
|
|
} catch (error) {
|
|
if (error.code === "ER_DUP_ENTRY") {
|
|
throw new DefaultError(409, "Administrator username already exists.")
|
|
}
|
|
return utils.handleDBError(error)
|
|
}
|
|
}
|
|
|
|
async function hasPermission(adminId, permissionKey) {
|
|
try {
|
|
const sql = `
|
|
SELECT COUNT(*) as count
|
|
FROM apiAdministratorsPermissions
|
|
WHERE administratorId = ? AND permissionKey = ?
|
|
`
|
|
const rows = await database.query(sql, [adminId, permissionKey])
|
|
return rows[0].count === 1
|
|
} catch (error) {
|
|
return utils.handleDBError(error)
|
|
}
|
|
}
|
|
|
|
async function assignPermission(adminId, permissionKey) {
|
|
try {
|
|
const sql = "INSERT INTO apiAdministratorsPermissions (administratorId, permissionKey) VALUES (?, ?)"
|
|
const result = await database.query(sql, [adminId, permissionKey])
|
|
|
|
return result.affectedRows > 0
|
|
} catch (error) {
|
|
if (error.code === "ER_DUP_ENTRY") return true
|
|
return utils.handleDBError(error)
|
|
}
|
|
}
|
|
|
|
async function revokePermission(adminId, permissionKey) {
|
|
try {
|
|
const sql = "DELETE FROM apiAdministratorsPermissions WHERE administratorId = ? AND permissionKey = ?"
|
|
const result = await database.query(sql, [adminId, permissionKey])
|
|
|
|
return result.affectedRows > 0
|
|
} catch (error) {
|
|
return utils.handleDBError(error)
|
|
}
|
|
}
|
|
|
|
async function getAdminPermissions(adminId) {
|
|
try {
|
|
const sql = `
|
|
SELECT permissionKey
|
|
FROM apiAdministratorsPermissions
|
|
WHERE administratorId = ?
|
|
`
|
|
const rows = await database.query(sql, [adminId])
|
|
return rows.map(r => r.permissionKey)
|
|
} catch (error) {
|
|
return utils.handleDBError(error)
|
|
}
|
|
}
|
|
|
|
async function updateAdminPassword(adminId, newHashedPassword) {
|
|
try {
|
|
const sql = "UPDATE apiAdministrators SET password = ? WHERE id = ?"
|
|
const result = await database.query(sql, [newHashedPassword, adminId])
|
|
|
|
if (result.affectedRows > 0) {
|
|
return {
|
|
code: 200,
|
|
message: "Password updated successfully."
|
|
}
|
|
} else {
|
|
throw new DefaultError(404, "Administrator not found.")
|
|
}
|
|
} catch (error) {
|
|
return utils.handleDBError(error)
|
|
}
|
|
}
|
|
|
|
async function getAdminByUsername(username) {
|
|
try {
|
|
const sql = "SELECT id, username, password, createdAt FROM apiAdministrators WHERE username = ?"
|
|
const rows = await database.query(sql, [username])
|
|
|
|
return rows[0] || null
|
|
} catch (error) {
|
|
return utils.handleDBError(error)
|
|
}
|
|
}
|
|
|
|
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])
|
|
|
|
return {
|
|
code: 200,
|
|
success: result.affectedRows > 0,
|
|
message: result.affectedRows > 0 ? "Action taken." : "Action already taken."
|
|
}
|
|
} catch (error) {
|
|
return utils.handleDBError(error)
|
|
}
|
|
}
|
|
|
|
module.exports = {
|
|
createAdmin,
|
|
getAdminById,
|
|
hasPermission,
|
|
addPlayerAction,
|
|
assignPermission,
|
|
revokePermission,
|
|
getAdminByUsername,
|
|
getAdminPermissions,
|
|
updateAdminPassword
|
|
} |