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> { async fn get_member_by_id(db: &State<DatabaseConnection>, memberId: i32) -> Result<Json<Member>, ErrorResponder> {
let db = db as &DatabaseConnection; let db = db as &DatabaseConnection;
// Create an empty variable to store the resulting member info
let database_member; let database_member;
// Search the database for the member based on the ID
match Members::find_by_id(memberId).one(db).await? { 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 => { None => {
return Err( return Err(
ErrorResponder { 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 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 { let rfids: Vec<RfidCard> = member_rfid_cards.into_iter().map(RfidCard::from).collect();
cardId: model.card_id.clone(),
cardComment: model.card_comment.clone()
}).collect();
let member = Member { // Create a member from the database model and append the RFID cards
id: database_member.id, let mut member: Member = database_member.into();
ntnuUsername: database_member.ntnu_username, member.rfidCards = rfids;
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
};
Ok(Json(member)) Ok(Json(member))
} }