mirror of
https://github.com/EQEmu/Server.git
synced 2026-05-31 00:46:46 +00:00
[Commands] Cleanup #rules Command. (#2593)
* [Commands] Cleanup #rules Command. - Cleanup messages and logic. - Rewrite all rules logic to use `std::string` and repositories. * References * Update rules.cpp * Strings::Equal and Strings::EqualFold. * Cleanup. * Update rulesys.cpp * Update rulesys.cpp Co-authored-by: Akkadius <akkadius1@gmail.com>
This commit is contained in:
@@ -44,7 +44,53 @@ public:
|
||||
*/
|
||||
|
||||
// Custom extended repository methods here
|
||||
static int GetRuleSetID(Database& db, std::string rule_set_name)
|
||||
{
|
||||
const auto query = fmt::format(
|
||||
"SELECT ruleset_id FROM {} WHERE `name` = '{}'",
|
||||
TableName(),
|
||||
Strings::Escape(rule_set_name)
|
||||
);
|
||||
auto results = db.QueryDatabase(query);
|
||||
if (!results.Success() || !results.RowCount()) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
auto row = results.begin();
|
||||
return std::stoi(row[0]);
|
||||
}
|
||||
|
||||
static int CreateNewRuleSet(Database& db, std::string rule_set_name)
|
||||
{
|
||||
const auto query = fmt::format(
|
||||
"INSERT INTO {} (`name`) VALUES ('{}')",
|
||||
TableName(),
|
||||
rule_set_name
|
||||
);
|
||||
auto results = db.QueryDatabase(query);
|
||||
if (!results.Success() || !results.RowsAffected()) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
return static_cast<int>(results.LastInsertedID());
|
||||
}
|
||||
|
||||
static std::string GetRuleSetName(Database& db, int rule_set_id)
|
||||
{
|
||||
const auto query = fmt::format(
|
||||
"SELECT `name` FROM {} WHERE ruleset_id = {}",
|
||||
TableName(),
|
||||
rule_set_id
|
||||
);
|
||||
auto results = db.QueryDatabase(query);
|
||||
if (!results.Success() || !results.RowsAffected()) {
|
||||
return std::string();
|
||||
}
|
||||
|
||||
auto row = results.begin();
|
||||
|
||||
return std::string(row[0]);
|
||||
}
|
||||
};
|
||||
|
||||
#endif //EQEMU_RULE_SETS_REPOSITORY_H
|
||||
|
||||
@@ -44,6 +44,87 @@ public:
|
||||
*/
|
||||
|
||||
// Custom extended repository methods here
|
||||
static std::vector<std::string> GetRuleNames(Database &db, int rule_set_id)
|
||||
{
|
||||
std::vector<std::string> v;
|
||||
|
||||
auto results = db.QueryDatabase(
|
||||
fmt::format(
|
||||
"SELECT rule_name FROM {} WHERE ruleset_id = {}",
|
||||
TableName(),
|
||||
rule_set_id
|
||||
)
|
||||
);
|
||||
if (!results.Success() || !results.RowCount()) {
|
||||
return v;
|
||||
}
|
||||
|
||||
for (auto row : results) {
|
||||
v.push_back(row[0]);
|
||||
}
|
||||
|
||||
return v;
|
||||
}
|
||||
|
||||
static std::vector<std::string> GetGroupedRules(Database &db)
|
||||
{
|
||||
std::vector <std::string> v;
|
||||
|
||||
auto results = db.QueryDatabase(
|
||||
fmt::format(
|
||||
"SELECT rule_name FROM {} GROUP BY rule_name",
|
||||
TableName()
|
||||
)
|
||||
);
|
||||
if (!results.Success() || !results.RowCount()) {
|
||||
return v;
|
||||
}
|
||||
|
||||
for (auto row : results) {
|
||||
v.push_back(row[0]);
|
||||
}
|
||||
|
||||
return v;
|
||||
}
|
||||
|
||||
static bool DeleteOrphanedRules(Database& db, std::vector<std::string>& v)
|
||||
{
|
||||
const auto query = fmt::format(
|
||||
"DELETE FROM {} WHERE rule_name IN ({})",
|
||||
TableName(),
|
||||
Strings::ImplodePair(",", std::pair<char, char>('\'', '\''), v)
|
||||
);
|
||||
|
||||
return db.QueryDatabase(query).Success();
|
||||
}
|
||||
|
||||
static bool InjectRules(Database& db, std::vector<std::tuple<int, std::string, std::string, std::string>>& v)
|
||||
{
|
||||
const auto query = fmt::format(
|
||||
"REPLACE INTO {} (`ruleset_id`, `rule_name`, `rule_value`, `notes`) VALUES {}",
|
||||
TableName(),
|
||||
Strings::ImplodePair(
|
||||
",",
|
||||
std::pair<char, char>('(', ')'),
|
||||
join_tuple(",", std::pair<char, char>('\'', '\''), v)
|
||||
)
|
||||
);
|
||||
|
||||
return db.QueryDatabase(query).Success();
|
||||
}
|
||||
|
||||
static bool UpdateRuleNote(Database& db, int rule_set_id, std::string rule_name, std::string notes)
|
||||
{
|
||||
const auto query = fmt::format(
|
||||
"UPDATE {} SET notes = '{}' WHERE ruleset_id = {} AND rule_name = '{}'",
|
||||
TableName(),
|
||||
Strings::Escape(notes),
|
||||
rule_set_id,
|
||||
rule_name
|
||||
);
|
||||
|
||||
return db.QueryDatabase(query).Success();
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user