From 5d1c59c95f3b2f9013cbb68ffa9af84e9fbd4275 Mon Sep 17 00:00:00 2001 From: Alex King <89047260+Kinglykrab@users.noreply.github.com> Date: Sat, 13 Jan 2024 00:47:25 -0500 Subject: [PATCH] [Merchants] Convert Clear/Delete/Save of Temporary Merchant Lists to Repositories (#3945) * [Merchants] Convert Clear/Delete/Save of Temporary Merchant Lists to Repositories - Convert `ClearMerchantTemp()`, `DeleteMerchantTemp()`, and `SaveMerchantTemp()` to repositories. * Update merchantlist_temp_repository.h --- common/database.cpp | 6 ++- .../base/base_merchantlist_temp_repository.h | 1 + .../merchantlist_temp_repository.h | 10 ++++- zone/zonedb.cpp | 39 +++++++++++++++---- 4 files changed, 45 insertions(+), 11 deletions(-) diff --git a/common/database.cpp b/common/database.cpp index 7520c1edd..79fff8128 100644 --- a/common/database.cpp +++ b/common/database.cpp @@ -54,6 +54,7 @@ #include "repositories/zone_repository.h" #include "zone_store.h" +#include "repositories/merchantlist_temp_repository.h" extern Client client; @@ -1221,8 +1222,9 @@ void Database::GetAccountFromID(uint32 id, char* oAccountName, int16* oStatus) { *oStatus = Strings::ToInt(row[1]); } -void Database::ClearMerchantTemp(){ - QueryDatabase("DELETE FROM merchantlist_temp"); +void Database::ClearMerchantTemp() +{ + MerchantlistTempRepository::ClearTemporaryMerchantLists(*this); } bool Database::UpdateName(const char* oldname, const char* newname) { diff --git a/common/repositories/base/base_merchantlist_temp_repository.h b/common/repositories/base/base_merchantlist_temp_repository.h index 524c73bd8..4d94d8f46 100644 --- a/common/repositories/base/base_merchantlist_temp_repository.h +++ b/common/repositories/base/base_merchantlist_temp_repository.h @@ -16,6 +16,7 @@ #include "../../strings.h" #include + class BaseMerchantlistTempRepository { public: struct MerchantlistTemp { diff --git a/common/repositories/merchantlist_temp_repository.h b/common/repositories/merchantlist_temp_repository.h index 0cbb7669e..ccf250f81 100644 --- a/common/repositories/merchantlist_temp_repository.h +++ b/common/repositories/merchantlist_temp_repository.h @@ -44,7 +44,15 @@ public: */ // Custom extended repository methods here - + static void ClearTemporaryMerchantLists(Database& db) + { + db.QueryDatabase( + fmt::format( + "TRUNCATE {}", + TableName() + ) + ); + } }; #endif //EQEMU_MERCHANTLIST_TEMP_REPOSITORY_H diff --git a/zone/zonedb.cpp b/zone/zonedb.cpp index f521760fe..9e2165405 100755 --- a/zone/zonedb.cpp +++ b/zone/zonedb.cpp @@ -44,6 +44,7 @@ #include "../common/repositories/merc_inventory_repository.h" #include "../common/repositories/merc_subtypes_repository.h" #include "../common/repositories/npc_types_tint_repository.h" +#include "../common/repositories/merchantlist_temp_repository.h" #include #include @@ -2534,17 +2535,39 @@ void ZoneDatabase::LoadMercenaryEquipment(Merc* m) } } -void ZoneDatabase::SaveMerchantTemp(uint32 npcid, uint32 slot, uint32 zone_id, uint32 instance_id, uint32 item, uint32 charges){ +void ZoneDatabase::SaveMerchantTemp( + uint32 npc_id, + uint32 slot_id, + uint32 zone_id, + uint32 instance_id, + uint32 item_id, + uint32 charges +) +{ + auto e = MerchantlistTempRepository::NewEntity(); - std::string query = StringFormat("REPLACE INTO merchantlist_temp (npcid, slot, zone_id, instance_id, itemid, charges) " - "VALUES(%d, %d, %d, %d, %d, %d)", npcid, slot, zone_id, instance_id, item, charges); - QueryDatabase(query); + e.npcid = npc_id; + e.slot = slot_id; + e.zone_id = zone_id; + e.instance_id = instance_id; + e.itemid = item_id; + e.charges = charges; + + MerchantlistTempRepository::ReplaceOne(*this, e); } -void ZoneDatabase::DeleteMerchantTemp(uint32 npcid, uint32 slot, uint32 zone_id, uint32 instance_id) { - std::string query = StringFormat("DELETE FROM merchantlist_temp WHERE npcid=%d AND slot=%d AND zone_id=%d AND instance_id=%d", - npcid, slot, zone_id, instance_id); - QueryDatabase(query); +void ZoneDatabase::DeleteMerchantTemp(uint32 npc_id, uint32 slot_id, uint32 zone_id, uint32 instance_id) +{ + MerchantlistTempRepository::DeleteWhere( + *this, + fmt::format( + "`npcid` = {} AND `slot` = {} AND `zone_id` = {} AND `instance_id` = {}", + npc_id, + slot_id, + zone_id, + instance_id + ) + ); } //New functions for timezone