From ac9d7b9946a968e809d31d35800c67e2a5b159cc Mon Sep 17 00:00:00 2001 From: "Sebastian H. Gabrielli" Date: Mon, 25 Dec 2023 16:57:57 +0100 Subject: [PATCH] Implement all balance functions --- src/main.rs | 4 ++- src/models/member.rs | 6 +++++ src/webserver_member.rs | 53 ++++++++++++++++++++++++++++++++++++++++ test.db | Bin 32768 -> 32768 bytes 4 files changed, 62 insertions(+), 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index f41d22a..957e712 100644 --- a/src/main.rs +++ b/src/main.rs @@ -26,6 +26,8 @@ async fn rocket() -> _ { get_member_by_id, add_member, get_members, - update_member_by_id + update_member_by_id, + get_member_balance_by_id, + update_member_balance_by_id ]) } diff --git a/src/models/member.rs b/src/models/member.rs index 538dda4..6981fbe 100644 --- a/src/models/member.rs +++ b/src/models/member.rs @@ -110,3 +110,9 @@ impl Into for rocket::serde::json::Json, } + + +#[derive(Deserialize, Serialize)] +pub struct Balance { + pub balance: i32 +} \ No newline at end of file diff --git a/src/webserver_member.rs b/src/webserver_member.rs index c4b5926..554c241 100644 --- a/src/webserver_member.rs +++ b/src/webserver_member.rs @@ -181,4 +181,57 @@ pub async fn update_member_by_id(db: &State, minimal_member_ let member: Member = current_member_info.into(); Ok(Json(member)) +} + +#[get("/member//balance")] +pub async fn get_member_balance_by_id(db: &State, member_id: i32) -> Result, ErrorResponder> { + let db = db as &DatabaseConnection; + + // Fetch the member's info from the BD + let member: members::Model; + match Members::find_by_id(member_id).one(db).await? { + Some(m) => member = m, + None => return Err (ErrorResponder { message: format!("Could not find member with the spcified ID. ID: {}", member_id) }), + } + + // Extract the balance + let balance: Balance = Balance { + balance: member.balance.to_owned() + }; + + // Return the balance + Ok(Json(balance)) +} + +#[put("/member//balance", data="")] +pub async fn update_member_balance_by_id(db: &State, member_id: i32, balance: Json) -> Result, ErrorResponder> { + let db = db as &DatabaseConnection; + + // Fetch the current member info from the DB + let current_member_info: members::Model; + match Members::find_by_id(member_id).one(db).await? { + Some(m) => current_member_info = m, + None => return Err (ErrorResponder { message: format!("Could not find member with the spcified ID. ID: {}", member_id) }), + } + + // Create a new DB thingie from the fetched info + let mut resulting_member: members::ActiveModel = current_member_info.clone().into(); + resulting_member.balance = ActiveValue::Set(current_member_info.balance + balance.balance); + + // Update the DB entry for the user + resulting_member.update(db).await?; + + // Fetch the member's info back from the DB + let current_member_info: members::Model; + match Members::find_by_id(member_id).one(db).await? { + Some(m) => current_member_info = m, + None => return Err (ErrorResponder { message: format!("Could not find member with the spcified ID. ID: {}", member_id) }), + } + + // Turn it into the native model + let balance: Balance = Balance { + balance: current_member_info.balance, + }; + + Ok(Json(balance)) } \ No newline at end of file diff --git a/test.db b/test.db index df70eb617a691a9a61a78d6083fc5a7b5af610f5..6ff48bec294c20de553b5c0c3844e6a9d5fd6788 100644 GIT binary patch delta 54 zcmZo@U}|V!njp<6I#I@%QFLR%GJTF8417QM8~80Y2lBt-