From e81a7b281ee86f4f5b218d9f2eef2f449d339a9a Mon Sep 17 00:00:00 2001 From: EntireTwix Date: Sun, 4 Jul 2021 03:12:17 -0700 Subject: [PATCH] :sparkles: SubBal() --- include/bank.h | 1 + include/bank_api.h | 4 +++- src/bank.cpp | 28 +++++++++++++++++++++++++++- src/bank_api.cpp | 5 +++++ 4 files changed, 36 insertions(+), 2 deletions(-) diff --git a/include/bank.h b/include/bank.h index 897ba7e..8693d7f 100644 --- a/include/bank.h +++ b/include/bank.h @@ -53,6 +53,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; + BankResponse SubBal(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 9232e47..2bcafdb 100644 --- a/include/bank_api.h +++ b/include/bank_api.h @@ -24,6 +24,7 @@ public: void AdminChangePassword(req_args) const; void SetBal(req_args) const; void AddBal(req_args) const; + void SubBal(req_args) const; void Help(req_args) const; void Ping(req_args) const; @@ -55,7 +56,8 @@ 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) + METHOD_ADD(api::AddBal, "/v1/admin/add_balance", Post, Options, "JsonFilter", "AdminFilter"); //expects ["name"](string) and ["amount"](32 bits) + METHOD_ADD(api::SubBal, "/v1/admin/sub_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 a3e7b81..e3c065a 100644 --- a/src/bank.cpp +++ b/src/bank.cpp @@ -151,6 +151,10 @@ BankResponse Bank::SetBal(const std::string &name, uint32_t amount) noexcept } BankResponse Bank::AddBal(const std::string &name, uint32_t amount) noexcept { + if (amount) + { + return {k400BadRequest, "Amount cannot be 0"}; + } if (users.modify_if(name, [amount](User &u) { u.balance += amount; })) { #if CONSERVATIVE_DISK_SAVE @@ -160,7 +164,29 @@ BankResponse Bank::AddBal(const std::string &name, uint32_t amount) noexcept save_flag = true; #endif #endif - return {k200OK, "Balance set!"}; + return {k200OK, "Balance added!"}; + } + else + { + return {k404NotFound, "User not found"}; + } +} +BankResponse Bank::SubBal(const std::string &name, uint32_t amount) noexcept +{ + if (amount) + { + return {k400BadRequest, "Amount cannot be 0"}; + } + if (users.modify_if(name, [amount](User &u) { amount > u.balance ? u.balance = 0 : u.balance -= amount; })) + { +#if CONSERVATIVE_DISK_SAVE +#if MULTI_THREADED + save_flag.SetChangesOn(); +#else + save_flag = true; +#endif +#endif + return {k200OK, "Balance subtracted!"}; } else { diff --git a/src/bank_api.cpp b/src/bank_api.cpp index d211943..952b275 100644 --- a/src/bank_api.cpp +++ b/src/bank_api.cpp @@ -100,6 +100,11 @@ void api::AddBal(req_args) const GEN_BODY RESPONSE_PARSE(bank.AddBal(body["name"].asCString(), body["amount"].asUInt())); } +void api::SubBal(req_args) const +{ + GEN_BODY + RESPONSE_PARSE(bank.AddBal(body["name"].asCString(), body["amount"].asUInt())); +} //System Usage void api::Help(req_args) const