mirror of
https://github.com/EQEmu/Server.git
synced 2026-05-31 09:06:46 +00:00
[Instances] Add expire_at Column (#4820)
* [Instances] Add `expire_at` Column * expire_at update * Update servertalk.h * Add rule Instances:ExpireOffsetTimeSeconds
This commit is contained in:
@@ -25,6 +25,7 @@ public:
|
||||
uint8_t is_global;
|
||||
uint32_t start_time;
|
||||
uint32_t duration;
|
||||
uint64_t expire_at;
|
||||
uint8_t never_expires;
|
||||
std::string notes;
|
||||
};
|
||||
@@ -43,6 +44,7 @@ public:
|
||||
"is_global",
|
||||
"start_time",
|
||||
"duration",
|
||||
"expire_at",
|
||||
"never_expires",
|
||||
"notes",
|
||||
};
|
||||
@@ -57,6 +59,7 @@ public:
|
||||
"is_global",
|
||||
"start_time",
|
||||
"duration",
|
||||
"expire_at",
|
||||
"never_expires",
|
||||
"notes",
|
||||
};
|
||||
@@ -105,6 +108,7 @@ public:
|
||||
e.is_global = 0;
|
||||
e.start_time = 0;
|
||||
e.duration = 0;
|
||||
e.expire_at = 0;
|
||||
e.never_expires = 0;
|
||||
e.notes = "";
|
||||
|
||||
@@ -149,8 +153,9 @@ public:
|
||||
e.is_global = row[3] ? static_cast<uint8_t>(strtoul(row[3], nullptr, 10)) : 0;
|
||||
e.start_time = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
|
||||
e.duration = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
|
||||
e.never_expires = row[6] ? static_cast<uint8_t>(strtoul(row[6], nullptr, 10)) : 0;
|
||||
e.notes = row[7] ? row[7] : "";
|
||||
e.expire_at = row[6] ? strtoull(row[6], nullptr, 10) : 0;
|
||||
e.never_expires = row[7] ? static_cast<uint8_t>(strtoul(row[7], nullptr, 10)) : 0;
|
||||
e.notes = row[8] ? row[8] : "";
|
||||
|
||||
return e;
|
||||
}
|
||||
@@ -189,8 +194,9 @@ public:
|
||||
v.push_back(columns[3] + " = " + std::to_string(e.is_global));
|
||||
v.push_back(columns[4] + " = " + std::to_string(e.start_time));
|
||||
v.push_back(columns[5] + " = " + std::to_string(e.duration));
|
||||
v.push_back(columns[6] + " = " + std::to_string(e.never_expires));
|
||||
v.push_back(columns[7] + " = '" + Strings::Escape(e.notes) + "'");
|
||||
v.push_back(columns[6] + " = " + std::to_string(e.expire_at));
|
||||
v.push_back(columns[7] + " = " + std::to_string(e.never_expires));
|
||||
v.push_back(columns[8] + " = '" + Strings::Escape(e.notes) + "'");
|
||||
|
||||
auto results = db.QueryDatabase(
|
||||
fmt::format(
|
||||
@@ -218,6 +224,7 @@ public:
|
||||
v.push_back(std::to_string(e.is_global));
|
||||
v.push_back(std::to_string(e.start_time));
|
||||
v.push_back(std::to_string(e.duration));
|
||||
v.push_back(std::to_string(e.expire_at));
|
||||
v.push_back(std::to_string(e.never_expires));
|
||||
v.push_back("'" + Strings::Escape(e.notes) + "'");
|
||||
|
||||
@@ -255,6 +262,7 @@ public:
|
||||
v.push_back(std::to_string(e.is_global));
|
||||
v.push_back(std::to_string(e.start_time));
|
||||
v.push_back(std::to_string(e.duration));
|
||||
v.push_back(std::to_string(e.expire_at));
|
||||
v.push_back(std::to_string(e.never_expires));
|
||||
v.push_back("'" + Strings::Escape(e.notes) + "'");
|
||||
|
||||
@@ -296,8 +304,9 @@ public:
|
||||
e.is_global = row[3] ? static_cast<uint8_t>(strtoul(row[3], nullptr, 10)) : 0;
|
||||
e.start_time = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
|
||||
e.duration = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
|
||||
e.never_expires = row[6] ? static_cast<uint8_t>(strtoul(row[6], nullptr, 10)) : 0;
|
||||
e.notes = row[7] ? row[7] : "";
|
||||
e.expire_at = row[6] ? strtoull(row[6], nullptr, 10) : 0;
|
||||
e.never_expires = row[7] ? static_cast<uint8_t>(strtoul(row[7], nullptr, 10)) : 0;
|
||||
e.notes = row[8] ? row[8] : "";
|
||||
|
||||
all_entries.push_back(e);
|
||||
}
|
||||
@@ -328,8 +337,9 @@ public:
|
||||
e.is_global = row[3] ? static_cast<uint8_t>(strtoul(row[3], nullptr, 10)) : 0;
|
||||
e.start_time = row[4] ? static_cast<uint32_t>(strtoul(row[4], nullptr, 10)) : 0;
|
||||
e.duration = row[5] ? static_cast<uint32_t>(strtoul(row[5], nullptr, 10)) : 0;
|
||||
e.never_expires = row[6] ? static_cast<uint8_t>(strtoul(row[6], nullptr, 10)) : 0;
|
||||
e.notes = row[7] ? row[7] : "";
|
||||
e.expire_at = row[6] ? strtoull(row[6], nullptr, 10) : 0;
|
||||
e.never_expires = row[7] ? static_cast<uint8_t>(strtoul(row[7], nullptr, 10)) : 0;
|
||||
e.notes = row[8] ? row[8] : "";
|
||||
|
||||
all_entries.push_back(e);
|
||||
}
|
||||
@@ -410,6 +420,7 @@ public:
|
||||
v.push_back(std::to_string(e.is_global));
|
||||
v.push_back(std::to_string(e.start_time));
|
||||
v.push_back(std::to_string(e.duration));
|
||||
v.push_back(std::to_string(e.expire_at));
|
||||
v.push_back(std::to_string(e.never_expires));
|
||||
v.push_back("'" + Strings::Escape(e.notes) + "'");
|
||||
|
||||
@@ -440,6 +451,7 @@ public:
|
||||
v.push_back(std::to_string(e.is_global));
|
||||
v.push_back(std::to_string(e.start_time));
|
||||
v.push_back(std::to_string(e.duration));
|
||||
v.push_back(std::to_string(e.expire_at));
|
||||
v.push_back(std::to_string(e.never_expires));
|
||||
v.push_back("'" + Strings::Escape(e.notes) + "'");
|
||||
|
||||
|
||||
@@ -7,49 +7,11 @@
|
||||
|
||||
class InstanceListRepository: public BaseInstanceListRepository {
|
||||
public:
|
||||
|
||||
/**
|
||||
* This file was auto generated and can be modified and extended upon
|
||||
*
|
||||
* Base repository methods are automatically
|
||||
* generated in the "base" version of this repository. The base repository
|
||||
* is immutable and to be left untouched, while methods in this class
|
||||
* are used as extension methods for more specific persistence-layer
|
||||
* accessors or mutators.
|
||||
*
|
||||
* Base Methods (Subject to be expanded upon in time)
|
||||
*
|
||||
* Note: Not all tables are designed appropriately to fit functionality with all base methods
|
||||
*
|
||||
* InsertOne
|
||||
* UpdateOne
|
||||
* DeleteOne
|
||||
* FindOne
|
||||
* GetWhere(std::string where_filter)
|
||||
* DeleteWhere(std::string where_filter)
|
||||
* InsertMany
|
||||
* All
|
||||
*
|
||||
* Example custom methods in a repository
|
||||
*
|
||||
* InstanceListRepository::GetByZoneAndVersion(int zone_id, int zone_version)
|
||||
* InstanceListRepository::GetWhereNeverExpires()
|
||||
* InstanceListRepository::GetWhereXAndY()
|
||||
* InstanceListRepository::DeleteWhereXAndY()
|
||||
*
|
||||
* Most of the above could be covered by base methods, but if you as a developer
|
||||
* find yourself re-using logic for other parts of the code, its best to just make a
|
||||
* method that can be re-used easily elsewhere especially if it can use a base repository
|
||||
* method and encapsulate filters there
|
||||
*/
|
||||
|
||||
// Custom extended repository methods here
|
||||
|
||||
static int UpdateDuration(Database& db, uint16 instance_id, uint32_t new_duration)
|
||||
{
|
||||
auto results = db.QueryDatabase(
|
||||
fmt::format(
|
||||
"UPDATE `{}` SET `duration` = {} WHERE `{}` = {}",
|
||||
"UPDATE `{}` SET `duration` = {}, `expire_at` = (`duration` + `start_time`) WHERE `{}` = {}",
|
||||
TableName(),
|
||||
new_duration,
|
||||
PrimaryKey(),
|
||||
@@ -65,7 +27,7 @@ public:
|
||||
auto results = db.QueryDatabase(
|
||||
fmt::format(
|
||||
SQL(
|
||||
SELECT ((start_time + duration) - UNIX_TIMESTAMP()) AS `remaining` FROM `{}`
|
||||
SELECT (`expire_at` - UNIX_TIMESTAMP()) AS `remaining` FROM `{}`
|
||||
WHERE `id` = {}
|
||||
),
|
||||
TableName(),
|
||||
|
||||
Reference in New Issue
Block a user