Implement all balance functions
This commit is contained in:
parent
dddef4e80a
commit
ac9d7b9946
@ -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
|
||||
])
|
||||
}
|
||||
|
||||
@ -110,3 +110,9 @@ impl Into<members::ActiveModel> for rocket::serde::json::Json<MinimalMemberWitho
|
||||
pub struct MultipleMembersStruct {
|
||||
pub members: Vec<Member>,
|
||||
}
|
||||
|
||||
|
||||
#[derive(Deserialize, Serialize)]
|
||||
pub struct Balance {
|
||||
pub balance: i32
|
||||
}
|
||||
@ -182,3 +182,56 @@ pub async fn update_member_by_id(db: &State<DatabaseConnection>, minimal_member_
|
||||
|
||||
Ok(Json(member))
|
||||
}
|
||||
|
||||
#[get("/member/<member_id>/balance")]
|
||||
pub async fn get_member_balance_by_id(db: &State<DatabaseConnection>, member_id: i32) -> Result<Json<Balance>, 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/<member_id>/balance", data="<balance>")]
|
||||
pub async fn update_member_balance_by_id(db: &State<DatabaseConnection>, member_id: i32, balance: Json<Balance>) -> Result<Json<Balance>, 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))
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user