diff --git a/include/bank.h b/include/bank.h index 61099d1..897ba7e 100644 --- a/include/bank.h +++ b/include/bank.h @@ -52,6 +52,7 @@ public: void ChangePassword(const std::string &name, std::string &&new_pass) noexcept; BankResponse SetBal(const std::string &name, uint32_t amount) noexcept; + BankResponse AddBal(const std::string &name, uint32_t amount) noexcept; bool Contains(const std::string &name) const noexcept; bool AdminVerifyAccount(std::string_view name) noexcept; diff --git a/include/bank_api.h b/include/bank_api.h index 9942e1a..9232e47 100644 --- a/include/bank_api.h +++ b/include/bank_api.h @@ -23,6 +23,7 @@ public: void ChangePassword(req_args) const; void AdminChangePassword(req_args) const; void SetBal(req_args) const; + void AddBal(req_args) const; void Help(req_args) const; void Ping(req_args) const; @@ -54,6 +55,7 @@ public: METHOD_ADD(api::ChangePassword, "/v1/user/change_password", Patch, Options, "JsonFilter", "UserFilter"); //expects ["new_pass"](string) METHOD_ADD(api::AdminChangePassword, "/v1/user/change_password", Patch, Options, "JsonFilter", "AdminFilter"); //expects ["name"](string) and ["new_pass"](string) METHOD_ADD(api::SetBal, "/v1/admin/set_balance", Patch, Options, "JsonFilter", "AdminFilter"); //expects ["name"](string) and ["amount"](32 bits) + METHOD_ADD(api::AddBal, "/v1/admin/give_balance", Post, Options, "JsonFilter", "AdminFilter"); //expects ["name"](string) and ["amount"](32 bits) //System Usage METHOD_ADD(api::Help, "/v1/help", Get, Options); diff --git a/src/bank.cpp b/src/bank.cpp index e5c3b41..a3e7b81 100644 --- a/src/bank.cpp +++ b/src/bank.cpp @@ -149,6 +149,24 @@ BankResponse Bank::SetBal(const std::string &name, uint32_t amount) noexcept return {k404NotFound, "User not found"}; } } +BankResponse Bank::AddBal(const std::string &name, uint32_t amount) noexcept +{ + if (users.modify_if(name, [amount](User &u) { u.balance += amount; })) + { +#if CONSERVATIVE_DISK_SAVE +#if MULTI_THREADED + save_flag.SetChangesOn(); +#else + save_flag = true; +#endif +#endif + return {k200OK, "Balance set!"}; + } + else + { + return {k404NotFound, "User not found"}; + } +} bool Bank::Contains(const std::string &name) const noexcept { return users.contains(name); diff --git a/src/bank_api.cpp b/src/bank_api.cpp index 42cbd97..199d96c 100644 --- a/src/bank_api.cpp +++ b/src/bank_api.cpp @@ -95,6 +95,11 @@ void api::SetBal(req_args) const GEN_BODY RESPONSE_PARSE(bank.SetBal(body["name"].asCString(), body["amount"].asUInt())); } +void api::AddBal(req_args) const +{ + GEN_BODY + RESPONSE_PARSE(bank.AddBal(body["name"].asCString(), body["amount"].asUInt())); +} //System Usage void api::Help(req_args) const