From 897df27007d3b50f1d9d1b7f89c4455497966f65 Mon Sep 17 00:00:00 2001 From: Gellipapa <gellerthorvath0@gmail.com> Date: Sat, 18 May 2024 13:54:45 +0200 Subject: [PATCH 1/4] :package: Implemented better job create method --- [core]/es_extended/fxmanifest.lua | 3 +- [core]/es_extended/server/functions.lua | 31 ------ .../es_extended/server/modules/createJob.lua | 100 ++++++++++++++++++ 3 files changed, 102 insertions(+), 32 deletions(-) create mode 100644 [core]/es_extended/server/modules/createJob.lua diff --git a/[core]/es_extended/fxmanifest.lua b/[core]/es_extended/fxmanifest.lua index fe10450d7..6e86e7319 100644 --- a/[core]/es_extended/fxmanifest.lua +++ b/[core]/es_extended/fxmanifest.lua @@ -30,7 +30,8 @@ server_scripts { 'common/modules/*.lua', 'common/functions.lua', 'server/modules/actions.lua', - 'server/modules/npwd.lua' + 'server/modules/npwd.lua', + 'server/modules/createJob.lua' } client_scripts { diff --git a/[core]/es_extended/server/functions.lua b/[core]/es_extended/server/functions.lua index 38834ddc1..e4be7b301 100644 --- a/[core]/es_extended/server/functions.lua +++ b/[core]/es_extended/server/functions.lua @@ -406,37 +406,6 @@ function ESX.DiscordLogFields(name, title, color, fields) ) end ---- Create Job at Runtime ---- @param name string ---- @param label string ---- @param grades table -function ESX.CreateJob(name, label, grades) - if not name then - return print("[^3WARNING^7] missing argument `name(string)` while creating a job") - end - - if not label then - return print("[^3WARNING^7] missing argument `label(string)` while creating a job") - end - - if not grades or not next(grades) then - return print("[^3WARNING^7] missing argument `grades(table)` while creating a job!") - end - - local parameters = {} - local job = { name = name, label = label, grades = {} } - - for _, v in pairs(grades) do - job.grades[tostring(v.grade)] = { job_name = name, grade = v.grade, name = v.name, label = v.label, salary = v.salary, skin_male = v.skin_male or "{}", skin_female = v.skin_female or "{}" } - parameters[#parameters + 1] = { name, v.grade, v.name, v.label, v.salary, v.skin_male or "{}", v.skin_female or "{}" } - end - - MySQL.insert("INSERT IGNORE INTO jobs (name, label) VALUES (?, ?)", { name, label }) - MySQL.prepare("INSERT INTO job_grades (job_name, grade, name, label, salary, skin_male, skin_female) VALUES (?, ?, ?, ?, ?, ?, ?)", parameters) - - ESX.Jobs[name] = job -end - function ESX.RefreshJobs() local Jobs = {} local jobs = MySQL.query.await("SELECT * FROM jobs") diff --git a/[core]/es_extended/server/modules/createJob.lua b/[core]/es_extended/server/modules/createJob.lua new file mode 100644 index 000000000..6640eb093 --- /dev/null +++ b/[core]/es_extended/server/modules/createJob.lua @@ -0,0 +1,100 @@ + +local NOTIFY_TYPES = { + INFO = "^5[%s]^7-^6[INFO]^7 %s", + SUCCESS = "^5[%s]^7-^2[SUCCESS]^7 %s", + ERROR = "^5[%s]^7-^1[ERROR]^7 %s" +} + +local function doesJobAndGradesExist(name, grades) + local jobExists = ESX.Jobs[name] or false + for _, grade in ipairs(grades) do + if ESX.DoesJobExist(name, grade.grade) then + jobExists = true + break + end + end + + return jobExists +end + +local function generateTransactionQueries(name,grades) + local queries = {} + for _, grade in ipairs(grades) do + queries[#queries+1] = { + query = 'INSERT INTO job_grades (job_name, grade, name, label, salary, skin_male, skin_female) VALUES (?, ?, ?, ?, ?, ?, ?)', + values = {name, grade.grade, grade.name, grade.label, grade.salary, '{}', '{}'} + } + end + + return queries +end + +local function generateNewJobTable(name, label, grades) + local job = { name = name, label = label, grades = {} } + for _, v in pairs(grades) do + job.grades[tostring(v.grade)] = { job_name = name, grade = v.grade, name = v.name, label = v.label, salary = v.salary, skin_male = {}, skin_female = {} } + end + + return job +end + +local function notify(notifyType,resourceName,message,...) + local formattedMessage = string.format(message, ...) + + if not NOTIFY_TYPES[notifyType] then + return print(NOTIFY_TYPES.INFO:format(resourceName,formattedMessage)) + end + + return print(NOTIFY_TYPES[notifyType]:format(resourceName,formattedMessage)) +end + +--- Create Job at Runtime +--- @param name string +--- @param label string +--- @param grades table +function ESX.CreateJob(name, label, grades) + local currentResourceName = GetInvokingResource() + local success = false + + if not name or name == '' then + notify("ERROR",currentResourceName, 'Missing argument `name`') + return + end + if not label or label == '' then + notify("ERROR",currentResourceName, 'Missing argument `label`') + return + end + if not grades or not next(grades) then + notify("ERROR",currentResourceName, 'Missing argument `grades`') + return + end + + local currentJobExist = doesJobAndGradesExist(name, grades) + + if currentJobExist then + notify("ERROR",currentResourceName, 'Job already exists: `%s`', name) + return + end + + MySQL.insert('INSERT IGNORE INTO jobs (name, label) VALUES (?, ?)', {name, label}, function(jobId) + if not jobId == 0 then + notify("ERROR",currentResourceName, 'Failed to insert job: `%s`', name) + return + end + + local queries = generateTransactionQueries(name, grades) + + MySQL.transaction(queries, function(results) + success = results + if not results then + notify("ERROR",currentResourceName, 'Failed to insert one or more grades for job: `%s`', name) + return + end + + ESX.Jobs[name] = generateNewJobTable(name,label,grades) + notify("SUCCESS",currentResourceName, 'Job created successfully: `%s`', name) + end) + end) + + return success +end \ No newline at end of file From 1596816465d82e6e8e9bf28f54263212389b7b0c Mon Sep 17 00:00:00 2001 From: Gellipapa <gellerthorvath0@gmail.com> Date: Sat, 18 May 2024 14:59:38 +0200 Subject: [PATCH 2/4] Revert ":package: Implemented better job create method" This reverts commit 897df27007d3b50f1d9d1b7f89c4455497966f65. --- [core]/es_extended/fxmanifest.lua | 3 +- [core]/es_extended/server/functions.lua | 31 ++++++ .../es_extended/server/modules/createJob.lua | 100 ------------------ 3 files changed, 32 insertions(+), 102 deletions(-) delete mode 100644 [core]/es_extended/server/modules/createJob.lua diff --git a/[core]/es_extended/fxmanifest.lua b/[core]/es_extended/fxmanifest.lua index 6e86e7319..fe10450d7 100644 --- a/[core]/es_extended/fxmanifest.lua +++ b/[core]/es_extended/fxmanifest.lua @@ -30,8 +30,7 @@ server_scripts { 'common/modules/*.lua', 'common/functions.lua', 'server/modules/actions.lua', - 'server/modules/npwd.lua', - 'server/modules/createJob.lua' + 'server/modules/npwd.lua' } client_scripts { diff --git a/[core]/es_extended/server/functions.lua b/[core]/es_extended/server/functions.lua index e4be7b301..38834ddc1 100644 --- a/[core]/es_extended/server/functions.lua +++ b/[core]/es_extended/server/functions.lua @@ -406,6 +406,37 @@ function ESX.DiscordLogFields(name, title, color, fields) ) end +--- Create Job at Runtime +--- @param name string +--- @param label string +--- @param grades table +function ESX.CreateJob(name, label, grades) + if not name then + return print("[^3WARNING^7] missing argument `name(string)` while creating a job") + end + + if not label then + return print("[^3WARNING^7] missing argument `label(string)` while creating a job") + end + + if not grades or not next(grades) then + return print("[^3WARNING^7] missing argument `grades(table)` while creating a job!") + end + + local parameters = {} + local job = { name = name, label = label, grades = {} } + + for _, v in pairs(grades) do + job.grades[tostring(v.grade)] = { job_name = name, grade = v.grade, name = v.name, label = v.label, salary = v.salary, skin_male = v.skin_male or "{}", skin_female = v.skin_female or "{}" } + parameters[#parameters + 1] = { name, v.grade, v.name, v.label, v.salary, v.skin_male or "{}", v.skin_female or "{}" } + end + + MySQL.insert("INSERT IGNORE INTO jobs (name, label) VALUES (?, ?)", { name, label }) + MySQL.prepare("INSERT INTO job_grades (job_name, grade, name, label, salary, skin_male, skin_female) VALUES (?, ?, ?, ?, ?, ?, ?)", parameters) + + ESX.Jobs[name] = job +end + function ESX.RefreshJobs() local Jobs = {} local jobs = MySQL.query.await("SELECT * FROM jobs") diff --git a/[core]/es_extended/server/modules/createJob.lua b/[core]/es_extended/server/modules/createJob.lua deleted file mode 100644 index 6640eb093..000000000 --- a/[core]/es_extended/server/modules/createJob.lua +++ /dev/null @@ -1,100 +0,0 @@ - -local NOTIFY_TYPES = { - INFO = "^5[%s]^7-^6[INFO]^7 %s", - SUCCESS = "^5[%s]^7-^2[SUCCESS]^7 %s", - ERROR = "^5[%s]^7-^1[ERROR]^7 %s" -} - -local function doesJobAndGradesExist(name, grades) - local jobExists = ESX.Jobs[name] or false - for _, grade in ipairs(grades) do - if ESX.DoesJobExist(name, grade.grade) then - jobExists = true - break - end - end - - return jobExists -end - -local function generateTransactionQueries(name,grades) - local queries = {} - for _, grade in ipairs(grades) do - queries[#queries+1] = { - query = 'INSERT INTO job_grades (job_name, grade, name, label, salary, skin_male, skin_female) VALUES (?, ?, ?, ?, ?, ?, ?)', - values = {name, grade.grade, grade.name, grade.label, grade.salary, '{}', '{}'} - } - end - - return queries -end - -local function generateNewJobTable(name, label, grades) - local job = { name = name, label = label, grades = {} } - for _, v in pairs(grades) do - job.grades[tostring(v.grade)] = { job_name = name, grade = v.grade, name = v.name, label = v.label, salary = v.salary, skin_male = {}, skin_female = {} } - end - - return job -end - -local function notify(notifyType,resourceName,message,...) - local formattedMessage = string.format(message, ...) - - if not NOTIFY_TYPES[notifyType] then - return print(NOTIFY_TYPES.INFO:format(resourceName,formattedMessage)) - end - - return print(NOTIFY_TYPES[notifyType]:format(resourceName,formattedMessage)) -end - ---- Create Job at Runtime ---- @param name string ---- @param label string ---- @param grades table -function ESX.CreateJob(name, label, grades) - local currentResourceName = GetInvokingResource() - local success = false - - if not name or name == '' then - notify("ERROR",currentResourceName, 'Missing argument `name`') - return - end - if not label or label == '' then - notify("ERROR",currentResourceName, 'Missing argument `label`') - return - end - if not grades or not next(grades) then - notify("ERROR",currentResourceName, 'Missing argument `grades`') - return - end - - local currentJobExist = doesJobAndGradesExist(name, grades) - - if currentJobExist then - notify("ERROR",currentResourceName, 'Job already exists: `%s`', name) - return - end - - MySQL.insert('INSERT IGNORE INTO jobs (name, label) VALUES (?, ?)', {name, label}, function(jobId) - if not jobId == 0 then - notify("ERROR",currentResourceName, 'Failed to insert job: `%s`', name) - return - end - - local queries = generateTransactionQueries(name, grades) - - MySQL.transaction(queries, function(results) - success = results - if not results then - notify("ERROR",currentResourceName, 'Failed to insert one or more grades for job: `%s`', name) - return - end - - ESX.Jobs[name] = generateNewJobTable(name,label,grades) - notify("SUCCESS",currentResourceName, 'Job created successfully: `%s`', name) - end) - end) - - return success -end \ No newline at end of file From 40abb5550527a89ba30fed30f915c0613314a542 Mon Sep 17 00:00:00 2001 From: Gellipapa <gellerthorvath0@gmail.com> Date: Sat, 18 May 2024 15:21:01 +0200 Subject: [PATCH 3/4] :package: Implemented new better createJob method --- [core]/es_extended/fxmanifest.lua | 3 +- [core]/es_extended/server/functions.lua | 31 ------ .../es_extended/server/modules/createJob.lua | 100 ++++++++++++++++++ 3 files changed, 102 insertions(+), 32 deletions(-) create mode 100644 [core]/es_extended/server/modules/createJob.lua diff --git a/[core]/es_extended/fxmanifest.lua b/[core]/es_extended/fxmanifest.lua index fe10450d7..6e86e7319 100644 --- a/[core]/es_extended/fxmanifest.lua +++ b/[core]/es_extended/fxmanifest.lua @@ -30,7 +30,8 @@ server_scripts { 'common/modules/*.lua', 'common/functions.lua', 'server/modules/actions.lua', - 'server/modules/npwd.lua' + 'server/modules/npwd.lua', + 'server/modules/createJob.lua' } client_scripts { diff --git a/[core]/es_extended/server/functions.lua b/[core]/es_extended/server/functions.lua index 38834ddc1..e4be7b301 100644 --- a/[core]/es_extended/server/functions.lua +++ b/[core]/es_extended/server/functions.lua @@ -406,37 +406,6 @@ function ESX.DiscordLogFields(name, title, color, fields) ) end ---- Create Job at Runtime ---- @param name string ---- @param label string ---- @param grades table -function ESX.CreateJob(name, label, grades) - if not name then - return print("[^3WARNING^7] missing argument `name(string)` while creating a job") - end - - if not label then - return print("[^3WARNING^7] missing argument `label(string)` while creating a job") - end - - if not grades or not next(grades) then - return print("[^3WARNING^7] missing argument `grades(table)` while creating a job!") - end - - local parameters = {} - local job = { name = name, label = label, grades = {} } - - for _, v in pairs(grades) do - job.grades[tostring(v.grade)] = { job_name = name, grade = v.grade, name = v.name, label = v.label, salary = v.salary, skin_male = v.skin_male or "{}", skin_female = v.skin_female or "{}" } - parameters[#parameters + 1] = { name, v.grade, v.name, v.label, v.salary, v.skin_male or "{}", v.skin_female or "{}" } - end - - MySQL.insert("INSERT IGNORE INTO jobs (name, label) VALUES (?, ?)", { name, label }) - MySQL.prepare("INSERT INTO job_grades (job_name, grade, name, label, salary, skin_male, skin_female) VALUES (?, ?, ?, ?, ?, ?, ?)", parameters) - - ESX.Jobs[name] = job -end - function ESX.RefreshJobs() local Jobs = {} local jobs = MySQL.query.await("SELECT * FROM jobs") diff --git a/[core]/es_extended/server/modules/createJob.lua b/[core]/es_extended/server/modules/createJob.lua new file mode 100644 index 000000000..535394bba --- /dev/null +++ b/[core]/es_extended/server/modules/createJob.lua @@ -0,0 +1,100 @@ + +local NOTIFY_TYPES = { + INFO = "^5[%s]^7-^6[INFO]^7 %s", + SUCCESS = "^5[%s]^7-^2[SUCCESS]^7 %s", + ERROR = "^5[%s]^7-^1[ERROR]^7 %s" +} + +local function doesJobAndGradesExist(name, grades) + local jobExists = false + for _, grade in ipairs(grades) do + if ESX.DoesJobExist(name, grade.grade) then + jobExists = true + break + end + end + + return jobExists +end + +local function generateTransactionQueries(name,grades) + local queries = {} + for _, grade in ipairs(grades) do + queries[#queries+1] = { + query = 'INSERT INTO job_grades (job_name, grade, name, label, salary, skin_male, skin_female) VALUES (?, ?, ?, ?, ?, ?, ?)', + values = {name, grade.grade, grade.name, grade.label, grade.salary, '{}', '{}'} + } + end + + return queries +end + +local function generateNewJobTable(name, label, grades) + local job = { name = name, label = label, grades = {} } + for _, v in pairs(grades) do + job.grades[tostring(v.grade)] = { job_name = name, grade = v.grade, name = v.name, label = v.label, salary = v.salary, skin_male = {}, skin_female = {} } + end + + return job +end + +local function notify(notifyType,resourceName,message,...) + local formattedMessage = string.format(message, ...) + + if not NOTIFY_TYPES[notifyType] then + return print(NOTIFY_TYPES.INFO:format(resourceName,formattedMessage)) + end + + return print(NOTIFY_TYPES[notifyType]:format(resourceName,formattedMessage)) +end + +--- Create Job at Runtime +--- @param name string +--- @param label string +--- @param grades table +function ESX.CreateJob(name, label, grades) + local currentResourceName = GetInvokingResource() + local success = false + + if not name or name == '' then + notify("ERROR",currentResourceName, 'Missing argument `name`') + return + end + if not label or label == '' then + notify("ERROR",currentResourceName, 'Missing argument `label`') + return + end + if not grades or not next(grades) then + notify("ERROR",currentResourceName, 'Missing argument `grades`') + return + end + + local currentJobExist = doesJobAndGradesExist(name, grades) + + if currentJobExist then + notify("ERROR",currentResourceName, 'Job or grades already exists: `%s`', name) + return + end + + MySQL.insert('INSERT IGNORE INTO jobs (name, label) VALUES (?, ?)', {name, label}, function(jobId) + if not jobId == 0 then + notify("ERROR",currentResourceName, 'Failed to insert job: `%s`', name) + return + end + + local queries = generateTransactionQueries(name, grades) + + MySQL.transaction(queries, function(results) + success = results + if not results then + notify("ERROR",currentResourceName, 'Failed to insert one or more grades for job: `%s`', name) + return + end + + ESX.Jobs[name] = generateNewJobTable(name,label,grades) + notify("SUCCESS",currentResourceName, 'Job created successfully: `%s`', name) + end) + end) + + return success +end \ No newline at end of file From 257d3af110544e1cd57d42cc51544f905919caf4 Mon Sep 17 00:00:00 2001 From: Gellipapa <gellerthorvath0@gmail.com> Date: Sat, 18 May 2024 17:09:56 +0200 Subject: [PATCH 4/4] :ambulance: fix job checker (Arctos) --- [core]/es_extended/server/modules/createJob.lua | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/[core]/es_extended/server/modules/createJob.lua b/[core]/es_extended/server/modules/createJob.lua index 535394bba..aab40338d 100644 --- a/[core]/es_extended/server/modules/createJob.lua +++ b/[core]/es_extended/server/modules/createJob.lua @@ -6,15 +6,17 @@ local NOTIFY_TYPES = { } local function doesJobAndGradesExist(name, grades) - local jobExists = false - for _, grade in ipairs(grades) do - if ESX.DoesJobExist(name, grade.grade) then - jobExists = true - break - end + if not ESX.Jobs[name] then + return false end - return jobExists + for _, grade in ipairs(grades) do + if not ESX.DoesJobExist(name, grade.grade) then + return false + end + end + + return true end local function generateTransactionQueries(name,grades)