2026-04-14 17:41:39 +02:00

205 lines
8.2 KiB
JavaScript

/**
* @param {string} key
* @returns {Array}
*/
app.use("/getAllServerJobs.lvorex", express.json())
app.post("/getAllServerJobs.lvorex", async (req, res) => {
const postBody = req.body
const { keyFound, userKey } = await controlKey(req, postBody.key)
if (keyFound === false) return res.json({ code: 404, message: "Not authorized." })
const PermissionCheck = await checkPermission(userKey.rank, "Jobs", 0)
if (!PermissionCheck) return res.json({ code: 401, message: "Your rank is not enough." })
const toInsertJobs = []
if (config.Framework.includes("qb")) {
const SharedJobs = FrameworkObject.Shared.Jobs
const toPrepareJobs = []
Object.entries(SharedJobs).forEach(([key, value]) => {
toPrepareJobs.push({
label: value.label,
code: key,
payment: value.defaultDuty ? 'Default Payment' : 'Off Duty Payment',
grades: value.grades
})
})
if (toPrepareJobs.length === 0) return res.json({ code: 200, message: [] })
for await (const job of toPrepareJobs) {
let result = await query(`
select * from \`players\`
where \`job\` like '%"name":"${job.code}",%'
`)
if (result === false) return res.json({ code: 404, message: "SQL Error Appeared." })
let mostRankedPlayer = { name: "", grade: { level: 0, name: "" } }
let jobPlayers = []
for await (const p of result) {
let dcResult = await query(`
select * from \`madmin_characters\`
where \`identifier\` = '${p.citizenid}'
`)
if (dcResult === false) return res.json({ code: 404, message: "SQL Error Appeared." })
let userAvatar = "img/DefaultIcon.png"
if (dcResult.length !== 0) {
userAvatar = dcResult[0].discord_avatar
}
let jobCredentials = JSON.parse(p.job)
let charInfo = JSON.parse(p.charinfo)
const NeededPlayer = await checkPlayerIsOnline(p.citizenid, res, true)
if (NeededPlayer) {
jobCredentials = NeededPlayer.job
charInfo = NeededPlayer.charinfo
}
const preparePlayer = {
name: charInfo.firstname+" "+charInfo.lastname,
grade: jobCredentials.grade.level,
gradeName: jobCredentials.grade.name,
identifier: p.citizenid,
avatar: userAvatar
}
if (mostRankedPlayer.grade.level < jobCredentials.grade.level) {
mostRankedPlayer = {
name: jobCredentials.grade.name + ". " + charInfo.firstname+" "+charInfo.lastname,
grade: jobCredentials.grade.level,
identifier: p.citizenid
}
}
jobPlayers.push(preparePlayer)
}
result = await query(`
select * from \`madmin_jobs\`
where \`job\` = '${job.code}'
`)
if (result === false) return res.json({ code: 404, message: "SQL Error Appeared." })
let mAdminJobCredentials = { type: "state", image: "img/DefaultJobIcon.png" }
if (result.length === 0) {
result = await query(`
insert into \`madmin_jobs\` ( \`job\` )
values ( '${job.code}' )
`)
if (result === false) return res.json({ code: 404, message: "SQL Error Appeared." })
} else {
mAdminJobCredentials = { type: result[0].type, image: result[0].image }
}
toInsertJobs.push({
label: job.label,
code: job.code,
payment: job.payment,
grades: job.grades,
image: mAdminJobCredentials.image,
type: mAdminJobCredentials.type,
mostRankedPlayer,
jobPlayers
})
}
} else if (config.Framework.includes("esx")) {
const SharedJobs = FrameworkObject.GetJobs()
const toPrepareJobs = []
Object.entries(SharedJobs).forEach(([key, value]) => {
toPrepareJobs.push({
label: value.label,
code: key,
payment: 'Default Payment',
grades: value.grades
})
})
if (toPrepareJobs.length === 0) return res.json({ code: 200, message: [] })
for await (const job of toPrepareJobs) {
let result = await query(`
select * from \`users\`
where \`job\` = '${job.code}'
`)
if (result === false) return res.json({ code: 404, message: "SQL Error Appeared." })
let mostRankedPlayer = { name: "", grade: { level: 0, name: "" } }
let jobPlayers = []
for await (const p of result) {
let dcResult = await query(`
select * from \`madmin_characters\`
where \`identifier\` = '${p.identifier}'
`)
if (dcResult === false) return res.json({ code: 404, message: "SQL Error Appeared." })
let userAvatar = "img/DefaultIcon.png"
if (dcResult.length !== 0) {
userAvatar = dcResult[0].discord_avatar
}
let preparePlayer = {
name: p.firstname+" "+p.lastname,
grade: Number(p.job_grade),
gradeName: job.grades[p.job_grade].label,
identifier: p.identifier,
avatar: userAvatar
}
if (config.DifferentJobGrade) {
let GradeData = await query(`
select * from \`job_grades\`
where \`job_name\` = '${job.code}'
and \`grade\` = ${p.job_grade}
`)
if (GradeData === false) return res.json({ code: 404, message: "SQL Error Appeared." })
if (GradeData.length === 0) continue
GradeData = GradeData[0]
preparePlayer.gradeName = GradeData.label
}
if (mostRankedPlayer.grade.level < Number(p.job_grade)) {
mostRankedPlayer = {
name: job.grades[p.job_grade].label + ". " + p.firstname+" "+p.lastname,
grade: Number(p.job_grade),
identifier: p.identifier
}
}
jobPlayers.push(preparePlayer)
}
result = await query(`
select * from \`madmin_jobs\`
where \`job\` = '${job.code}'
`)
if (result === false) return res.json({ code: 404, message: "SQL Error Appeared." })
let mAdminJobCredentials = { type: "state", image: "img/DefaultJobIcon.png" }
if (result.length === 0) {
result = await query(`
insert into \`madmin_jobs\` ( \`job\` )
values ( '${job.code}' )
`)
if (result === false) return res.json({ code: 404, message: "SQL Error Appeared." })
} else {
mAdminJobCredentials = { type: result[0].type, image: result[0].image }
}
toInsertJobs.push({
label: job.label,
code: job.code,
payment: job.payment,
grades: job.grades,
image: mAdminJobCredentials.image,
type: mAdminJobCredentials.type,
mostRankedPlayer,
jobPlayers
})
}
}
res.json({ code: 200, message: toInsertJobs, framework: config.Framework })
})