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 df70eb6..6ff48be 100644 Binary files a/test.db and b/test.db differ