Simplify get_member_by_id with new from implementation

This commit is contained in:
Sebastian H. Gabrielli 2023-12-25 13:19:58 +01:00
parent b038811b58
commit 3c6e6c8656

View File

@ -204,34 +204,27 @@ async fn add_member(db: &State<DatabaseConnection>, minimalMemberWithoutId: Json
async fn get_member_by_id(db: &State<DatabaseConnection>, memberId: i32) -> Result<Json<Member>, ErrorResponder> {
let db = db as &DatabaseConnection;
// Create an empty variable to store the resulting member info
let database_member;
// Search the database for the member based on the ID
match Members::find_by_id(memberId).one(db).await? {
Some(model) => database_member = model,
Some(model) => database_member = model, // If the member is found, add the info to the previously created variable
None => {
return Err(
ErrorResponder {
message: format!("Failed to fetch member by ID. memberId: {}", memberId)
message: format!("Failed to fetch member by ID. memberId: {}", memberId) // If it is not found return with this error
}
);
},
};
// Get the member's RFID cards
let member_rfid_cards: Vec<rfid_cards::Model> = database_member.find_related(RfidCards).all(db).await?;
let rfids: Vec<RfidCard> = member_rfid_cards.iter().map(|model| RfidCard {
cardId: model.card_id.clone(),
cardComment: model.card_comment.clone()
}).collect();
let rfids: Vec<RfidCard> = member_rfid_cards.into_iter().map(RfidCard::from).collect();
let member = Member {
id: database_member.id,
ntnuUsername: database_member.ntnu_username,
firstName: database_member.first_name,
lastName: database_member.last_name,
email: database_member.email,
balance: database_member.balance,
imagePreference: database_member.image_preference,
rfidCards: rfids
};
// Create a member from the database model and append the RFID cards
let mut member: Member = database_member.into();
member.rfidCards = rfids;
Ok(Json(member))
}