mirror of
https://github.com/Expand-sys/CCash
synced 2025-12-17 00:22:14 +11:00
🚚✨ renamed save_lock & made PruneUsers()
This commit is contained in:
parent
34099acd02
commit
14b1bff364
1 changed files with 30 additions and 7 deletions
37
src/bank.cpp
37
src/bank.cpp
|
|
@ -91,7 +91,7 @@ BankResponse Bank::SendFunds(const std::string &a_name, const std::string &b_nam
|
||||||
}
|
}
|
||||||
|
|
||||||
BankResponse res;
|
BankResponse res;
|
||||||
std::shared_lock<std::shared_mutex> lock{save_lock};
|
std::shared_lock<std::shared_mutex> lock{iter_lock};
|
||||||
#if MAX_LOG_SIZE > 0
|
#if MAX_LOG_SIZE > 0
|
||||||
time_t current_time = time(NULL);
|
time_t current_time = time(NULL);
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -203,17 +203,33 @@ bool Bank::Contains(const std::string &name) const noexcept
|
||||||
{
|
{
|
||||||
return ValidUsername(name) && users.contains(name);
|
return ValidUsername(name) && users.contains(name);
|
||||||
}
|
}
|
||||||
bool Bank::AdminVerifyAccount(const std::string &name) noexcept
|
BankResponse Bank::PruneUsers(time_t threshold_time, uint32_t threshold_bal) noexcept
|
||||||
{
|
{
|
||||||
return (name == admin_account);
|
std::unique_lock<std::shared_mutex> lock{iter_lock};
|
||||||
|
size_t deleted_count = 0;
|
||||||
|
for (const auto &u : users)
|
||||||
|
{
|
||||||
|
users.erase_if(u.first, [threshold_time, threshold_bal, &deleted_count](User &u) -> bool {
|
||||||
|
if (u.log.data.back().time < threshold_time && u.balance < threshold_bal)
|
||||||
|
{
|
||||||
|
return ++deleted_count;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return {k200OK, std::to_string(deleted_count)};
|
||||||
}
|
}
|
||||||
|
|
||||||
BankResponse Bank::AddUser(const std::string &name, uint32_t init_bal, const std::string &init_pass) noexcept
|
BankResponse Bank::AddUser(const std::string &name, uint32_t init_bal, const std::string &init_pass) noexcept
|
||||||
{
|
{
|
||||||
if (!ValidUsername(name))
|
if (!ValidUsername(name))
|
||||||
{
|
{
|
||||||
return {k400BadRequest, "\"Invalid Username\""};
|
return {k400BadRequest, "\"Invalid Username\""};
|
||||||
}
|
}
|
||||||
std::shared_lock<std::shared_mutex> lock{save_lock};
|
std::shared_lock<std::shared_mutex> lock{iter_lock};
|
||||||
if (users.try_emplace_l(
|
if (users.try_emplace_l(
|
||||||
name, [](User &) {}, init_bal, init_pass))
|
name, [](User &) {}, init_bal, init_pass))
|
||||||
{
|
{
|
||||||
|
|
@ -245,7 +261,7 @@ BankResponse Bank::DelUser(const std::string &name) noexcept
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
std::shared_lock<std::shared_mutex> lock{save_lock};
|
std::shared_lock<std::shared_mutex> lock{iter_lock};
|
||||||
if (ValidUsername(name) && users.erase(name))
|
if (ValidUsername(name) && users.erase(name))
|
||||||
{
|
{
|
||||||
#if CONSERVATIVE_DISK_SAVE
|
#if CONSERVATIVE_DISK_SAVE
|
||||||
|
|
@ -284,7 +300,7 @@ void Bank::DelSelf(const std::string &name) noexcept
|
||||||
save_flag = true;
|
save_flag = true;
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
std::shared_lock<std::shared_mutex> lock{save_lock};
|
std::shared_lock<std::shared_mutex> lock{iter_lock};
|
||||||
users.erase(name);
|
users.erase(name);
|
||||||
}
|
}
|
||||||
//ONLY EVER BEING CALLED BY SAVE THREAD OR C-INTERUPT
|
//ONLY EVER BEING CALLED BY SAVE THREAD OR C-INTERUPT
|
||||||
|
|
@ -309,15 +325,22 @@ const char *Bank::Save()
|
||||||
users_copy.users.reserve(users.size());
|
users_copy.users.reserve(users.size());
|
||||||
users_copy.keys.reserve(users.size());
|
users_copy.keys.reserve(users.size());
|
||||||
{
|
{
|
||||||
std::unique_lock<std::shared_mutex> lock{save_lock};
|
std::unique_lock<std::shared_mutex> lock{iter_lock};
|
||||||
for (const auto &u : users)
|
for (const auto &u : users)
|
||||||
{
|
{
|
||||||
|
<<<<<<< Updated upstream
|
||||||
//we know it contains this key but we call this func to grab mutex
|
//we know it contains this key but we call this func to grab mutex
|
||||||
users.if_contains(u.first, [&users_copy, &u](const User &u_val)
|
users.if_contains(u.first, [&users_copy, &u](const User &u_val)
|
||||||
{
|
{
|
||||||
users_copy.users.emplace_back(u_val.Encode());
|
users_copy.users.emplace_back(u_val.Encode());
|
||||||
users_copy.keys.emplace_back(u.first);
|
users_copy.keys.emplace_back(u.first);
|
||||||
});
|
});
|
||||||
|
=======
|
||||||
|
users.if_contains(u.first, [&users_copy, &u](const User &u_val) {
|
||||||
|
users_copy.users.emplace_back(u_val.Encode());
|
||||||
|
users_copy.keys.emplace_back(u.first);
|
||||||
|
});
|
||||||
|
>>>>>>> Stashed changes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
FBE::bank_dom::GlobalFinalModel writer;
|
FBE::bank_dom::GlobalFinalModel writer;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue