Implement all image preference functions

This commit is contained in:
Sebastian H. Gabrielli 2023-12-25 17:06:51 +01:00
parent ac9d7b9946
commit 053fc6a545
4 changed files with 63 additions and 2 deletions

View File

@ -28,6 +28,8 @@ async fn rocket() -> _ {
get_members,
update_member_by_id,
get_member_balance_by_id,
update_member_balance_by_id
update_member_balance_by_id,
get_member_image_preference_by_id,
update_member_image_preference_by_id
])
}

View File

@ -116,3 +116,9 @@ pub struct MultipleMembersStruct {
pub struct Balance {
pub balance: i32
}
#[derive(Deserialize, Serialize)]
pub struct ImagePreference {
#[serde(rename = "imagePreference")]
pub image_preference: String
}

View File

@ -235,3 +235,56 @@ pub async fn update_member_balance_by_id(db: &State<DatabaseConnection>, member_
Ok(Json(balance))
}
#[get("/member/<member_id>/imagePreference")]
pub async fn get_member_image_preference_by_id(db: &State<DatabaseConnection>, member_id: i32) -> Result<Json<ImagePreference>, 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 image_preference: ImagePreference = ImagePreference {
image_preference: member.image_preference.to_owned()
};
// Return the balance
Ok(Json(image_preference))
}
#[put("/member/<member_id>/imagePreference", data="<image_preference>")]
pub async fn update_member_image_preference_by_id(db: &State<DatabaseConnection>, member_id: i32, image_preference: Json<ImagePreference>) -> Result<Json<ImagePreference>, 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.image_preference = ActiveValue::Set(image_preference.image_preference.clone());
// 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 image_preference: ImagePreference = ImagePreference {
image_preference: current_member_info.image_preference
};
Ok(Json(image_preference))
}

BIN
test.db

Binary file not shown.