Skip to content

Commit

Permalink
Remove citizenId & plate from vehicle_financing
Browse files Browse the repository at this point in the history
  • Loading branch information
TonybynMp4 authored Mar 1, 2024
1 parent e915a95 commit 4050726
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 44 deletions.
10 changes: 3 additions & 7 deletions migrate.sql
Original file line number Diff line number Diff line change
@@ -1,24 +1,20 @@
CREATE TABLE IF NOT EXISTS `vehicle_financing` (
`vehicleId` int(11) NOT NULL,
`citizenid` varchar(50) NOT NULL,
`plate` varchar(15) NOT NULL,
`balance` int(11) DEFAULT NULL,
`paymentamount` int(11) DEFAULT NULL,
`paymentsleft` int(11) DEFAULT NULL,
`financetime` int(11) DEFAULT NULL,
PRIMARY KEY (`vehicleId`),
FOREIGN KEY `vehicleId` (`vehicleId`) REFERENCES `player_vehicles` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY `plate` (`plate`) REFERENCES `player_vehicles` (`plate`) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY `citizenid` (`citizenid`) REFERENCES `players` (`citizenid`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO vehicle_financing (citizenid, plate, balance, paymentamount, paymentsleft, financetime)
SELECT citizenid, plate, balance, paymentamount, paymentsleft, financetime
INSERT INTO vehicle_financing (vehicleId, balance, paymentamount, paymentsleft, financetime)
SELECT id, balance, paymentamount, paymentsleft, financetime
FROM player_vehicles
WHERE balance > 0 OR paymentamount > 0 OR paymentsleft > 0 OR financetime > 0;

ALTER TABLE player_vehicles
DROP COLUMN balance,
DROP COLUMN paymentamount,
DROP COLUMN paymentsleft,
DROP COLUMN financetime;
DROP COLUMN financetime;
21 changes: 14 additions & 7 deletions server/main.lua
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ RegisterNetEvent('qbx_vehicleshop:server:removePlayer', function(citizenid)
if v.balance >= 1 then
local newTime = math.floor(v.financetime - (((os.time() - playTime) / 1000) / 60))
if newTime < 0 then newTime = 0 end
UpdateVehicleEntityFinanceTime(newTime, v.plate)
UpdateVehicleEntityFinanceTime(newTime, v.vehicleId)
end
end
financeTimer[citizenid] = nil
Expand All @@ -39,7 +39,7 @@ AddEventHandler('playerDropped', function()
if v.balance >= 1 and playTime then
local newTime = math.floor(v.financetime - (((os.time() - playTime) / 1000) / 60))
if newTime < 0 then newTime = 0 end
UpdateVehicleEntityFinanceTime(newTime, v.plate)
UpdateVehicleEntityFinanceTime(newTime, v.vehicleId)
end
end
if vehicles[1] and financeTimer[vehicles[1].citizenid] then
Expand Down Expand Up @@ -94,6 +94,13 @@ lib.callback.register('qbx_vehicleshop:server:GetVehiclesByName', function(sourc
local player = exports.qbx_core:GetPlayer(src)
if not player then return end
local vehicles = FetchVehicleEntitiesByCitizenId(player.PlayerData.citizenid)
local financeVehicles = FetchFinancedVehicleEntitiesByCitizenId(player.PlayerData.citizenid)
for _, v in pairs(financeVehicles) do
vehicles[v.vehicleId].balance = v.balance
vehicles[v.vehicleId].paymentamount = v.paymentamount
vehicles[v.vehicleId].paymentsleft = v.paymentsleft
vehicles[v.vehicleId].financetime = v.financetime
end
if vehicles[1] then
return vehicles
end
Expand Down Expand Up @@ -318,7 +325,7 @@ local function sellShowroomVehicleTransact(src, target, price, downPayment)
player.Functions.AddMoney('bank', price * config.commissionRate)
exports.qbx_core:Notify(src, locale('success.earned_commission', lib.math.groupdigits(commission)), 'success')

exports['Renewed-Banking']:addAccountMoney(player.PlayerData.job.name, price)
exports.qbx_management:AddMoney(player.PlayerData.job.name, price)
exports.qbx_core:Notify(target.PlayerData.source, locale('success.purchased'), 'success')
return true
end
Expand Down Expand Up @@ -418,8 +425,8 @@ RegisterNetEvent('qbx_vehicleshop:server:checkFinance', function()
local vehicles = FetchFinancedVehicleEntitiesByCitizenId(player.PlayerData.citizenid)
for _, v in pairs(vehicles) do
local plate = v.plate
DeleteVehicleEntity(plate)
--MySQL.update('UPDATE player_vehicles SET citizenid = ? WHERE plate = ?', {'REPO-'..v.citizenid, plate}) -- Use this if you don't want them to be deleted
DeleteVehicleEntity(v.id)
--MySQL.update('UPDATE player_vehicles SET citizenid = ? WHERE id = ?', {'REPO-'..v.citizenid, v.id}) -- Use this if you don't want them to be deleted
exports.qbx_core:Notify(src, locale('error.repossessed', plate), 'error')
end
end)
Expand Down Expand Up @@ -458,7 +465,7 @@ lib.addCommand('transfervehicle', {help = locale('general.command_transfervehicl
local target = exports.qbx_core:GetPlayer(buyerId)
local row = FetchVehicleEntityByPlate(plate)
if config.finance.preventSelling then
local financeRow = FetchFinancedVehicleEntityByPlate(plate)
local financeRow = FetchFinancedVehicleEntityById(row.id)
if financeRow.balance > 0 then
return exports.qbx_core:Notify(src, locale('error.financed'), 'error')
end
Expand Down Expand Up @@ -494,7 +501,7 @@ lib.addCommand('transfervehicle', {help = locale('general.command_transfervehicl
player.Functions.AddMoney(currencyType, sellAmount)
target.Functions.RemoveMoney(currencyType, sellAmount)
end
UpdateVehicleEntityOwner(targetcid, targetlicense, plate)
UpdateVehicleEntityOwner(targetcid, targetlicense, row.id)
TriggerClientEvent('vehiclekeys:client:SetOwner', buyerId, plate)
local sellerMessage = sellAmount > 0 and locale('success.soldfor') .. lib.math.groupdigits(sellAmount) or locale('success.gifted')
local buyerMessage = sellAmount > 0 and locale('success.boughtfor') .. lib.math.groupdigits(sellAmount) or locale('success.received_gift')
Expand Down
56 changes: 31 additions & 25 deletions server/storage.lua
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

---@param request InsertVehicleEntityRequest
function InsertVehicleEntity(request)
MySQL.insert('INSERT INTO player_vehicles (license, citizenid, vehicle, hash, mods, plate, garage, state) VALUES (?, ?, ?, ?, ?, ?, ?, ?)', {
local vehicleId = MySQL.insert.await('INSERT INTO player_vehicles (license, citizenid, vehicle, hash, mods, plate, garage, state) VALUES (?, ?, ?, ?, ?, ?, ?, ?)', {
request.license,
request.citizenId,
request.model,
Expand All @@ -16,6 +16,7 @@ function InsertVehicleEntity(request)
'pillboxgarage',
0
})
return vehicleId
end

---@class VehicleFinanceServer
Expand All @@ -30,15 +31,14 @@ end

---@param request InsertVehicleEntityWithFinanceRequest
function InsertVehicleEntityWithFinance(request)
InsertVehicleEntity({
local vehicleId = InsertVehicleEntity({
license = request.insertVehicleEntityRequest.license,
citizenId = request.insertVehicleEntityRequest.citizenId,
model = request.insertVehicleEntityRequest.model,
plate = request.insertVehicleEntityRequest.plate
})
MySQL.insert('INSERT INTO vehicle_financing (citizenid, plate, balance, paymentamount, paymentsleft, financetime) VALUES (?, ?, ?, ?, ?, ?)', {
request.insertVehicleEntityRequest.citizenId,
request.insertVehicleEntityRequest.plate,
MySQL.insert('INSERT INTO vehicle_financing (vehicleId, balance, paymentamount, paymentsleft, financetime) VALUES (?, ?, ?, ?, ?)', {
vehicleId,
request.vehicleFinance.balance,
request.vehicleFinance.payment,
request.vehicleFinance.paymentsLeft,
Expand All @@ -48,6 +48,13 @@ end

---@alias VehicleEntity table

---@class VehicleFinancingEntity
---@field vehicleId integer
---@field balance number
---@field paymentamount number
---@field paymentsleft integer
---@field financetime number

---@param citizenId string
---@return VehicleEntity[]
function FetchVehicleEntitiesByCitizenId(citizenId)
Expand All @@ -68,15 +75,15 @@ function DoesVehicleEntityExist(plate)
end

---@param time number
---@param plate string
function UpdateVehicleEntityFinanceTime(time, plate)
MySQL.update('UPDATE vehicle_financing SET financetime = ? WHERE plate = ?', {time, plate})
---@param vehicleId integer
function UpdateVehicleEntityFinanceTime(time, vehicleId)
MySQL.update('UPDATE vehicle_financing SET financetime = ? WHERE vehicleId = ?', {time, vehicleId})
end

---@param vehicleFinance VehicleFinanceServer
---@param plate string
function UpdateVehicleFinance(vehicleFinance, plate)
MySQL.update('UPDATE vehicle_financing SET balance = ?, paymentamount = ?, paymentsleft = ?, financetime = ? WHERE plate = ?', {
MySQL.update('UPDATE vehicle_financing AS vf INNER JOIN player_vehicles AS pv ON vf.vehicleId = pv.id SET vf.balance = ?, vf.paymentamount = ?, vf.paymentsleft = ?, vf.financetime = ? WHERE pv.plate = ?', {
vehicleFinance.balance,
vehicleFinance.payment,
vehicleFinance.paymentsLeft,
Expand All @@ -87,31 +94,30 @@ end

---@param citizenId string
---@param license string
---@param plate string
function UpdateVehicleEntityOwner(citizenId, license, plate)
MySQL.update('UPDATE player_vehicles SET citizenid = ?, license = ? WHERE plate = ?', {citizenId, license, plate})
MySQL.update('UPDATE vehicle_financing SET citizenid = ? WHERE plate = ?', {citizenId, plate})
---@param vehicleId integer
function UpdateVehicleEntityOwner(citizenId, license, vehicleId)
MySQL.update('UPDATE player_vehicles SET citizenid = ?, license = ? WHERE id = ?', {citizenId, license, vehicleId})
end

---@param citizenId string
---@return VehicleEntity[]
function FetchFinancedVehicleEntityByPlate(plate)
return MySQL.single.await('SELECT * FROM vehicle_financing WHERE plate = ? AND balance > 0 AND financetime < 1', {plate})
---@param id integer
---@return VehicleFinancingEntity
function FetchFinancedVehicleEntityById(id)
return MySQL.single.await('SELECT * FROM vehicle_financing WHERE vehicleId = ? AND balance > 0 AND financetime < 1', {id})
end

---@param citizenId string
---@return VehicleEntity[]
---@return VehicleFinancingEntity
function FetchFinancedVehicleEntitiesByCitizenId(citizenId)
return MySQL.query.await('SELECT * FROM vehicle_financing WHERE citizenid = ? AND balance > 0 AND financetime < 1', {citizenId})
return MySQL.query.await('SELECT vehicle_financing.* FROM vehicle_financing INNER JOIN player_vehicles ON player_vehicles.citizenid = "KLH31301" WHERE vehicle_financing.vehicleId = player_vehicles.id AND vehicle_financing.balance > 0 AND vehicle_financing.financetime > 1', {citizenId})
end

---@param license string
---@return VehicleEntity[]
---@return VehicleFinancingEntity
function FetchFinancedVehicleEntitiesByLicense(license)
return MySQL.query.await('SELECT * FROM vehicle_financing WHERE citizenid IN (SELECT citizenid FROM players WHERE license = ?) AND balance > 0 AND financetime < 1', {license})
return MySQL.query.await('SELECT * FROM vehicle_financing AS vf INNER JOIN players AS p ON p.citizenid = ? INNER JOIN player_vehicles AS pv ON pv.citizenid = p.citizenid AND vf.balance > 0 AND vf.financetime < 1', {license})
end

---@param plate string
function DeleteVehicleEntity(plate)
MySQL.query('DELETE FROM player_vehicles WHERE plate = ?', {plate})
end
---@param vehicleId integer
function DeleteVehicleEntity(vehicleId)
MySQL.query('DELETE FROM player_vehicles WHERE id = ?', {vehicleId})
end
6 changes: 1 addition & 5 deletions vehshop.sql
Original file line number Diff line number Diff line change
@@ -1,13 +1,9 @@
CREATE TABLE IF NOT EXISTS `vehicle_financing` (
`vehicleId` int(11) NOT NULL,
`citizenid` varchar(50) NOT NULL,
`plate` varchar(15) NOT NULL,
`balance` int(11) DEFAULT NULL,
`paymentamount` int(11) DEFAULT NULL,
`paymentsleft` int(11) DEFAULT NULL,
`financetime` int(11) DEFAULT NULL,
PRIMARY KEY (`vehicleId`),
FOREIGN KEY `vehicleId` (`vehicleId`) REFERENCES `player_vehicles` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY `plate` (`plate`) REFERENCES `player_vehicles` (`plate`) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY `citizenid` (`citizenid`) REFERENCES `players` (`citizenid`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

0 comments on commit 4050726

Please sign in to comment.