Implement rfid card lookup in get_members

This commit is contained in:
Sebastian H. Gabrielli 2023-12-25 13:11:36 +01:00
parent 8b704120d2
commit b038811b58
2 changed files with 27 additions and 2 deletions

View File

@ -20,6 +20,16 @@ struct RfidCard {
cardComment: String cardComment: String
} }
// Implement `.into()` to auto map values from the database model to the local struct
impl From<<entities::rfid_cards::Entity as sea_orm::EntityTrait>::Model> for RfidCard {
fn from(rfid_card: <entities::rfid_cards::Entity as sea_orm::EntityTrait>::Model) -> RfidCard {
RfidCard {
cardId: rfid_card.card_id,
cardComment: rfid_card.card_comment,
}
}
}
#[derive(Serialize, Deserialize)] #[derive(Serialize, Deserialize)]
struct Member { struct Member {
id: i32, id: i32,
@ -106,8 +116,23 @@ async fn get_members(db: &State<DatabaseConnection>) -> Result<Json<MultipleMemb
let members = Members::find().all(db).await?; let members = Members::find().all(db).await?;
// Convert this vector from the database model to the local struct model // Convert this vector from the database model to the local struct model
let members: Vec<Member> = members.into_iter().map(Member::from).collect(); let mut members: Vec<Member> = members.into_iter().map(Member::from).collect();
// TODO: Add the member's RFID card
// Fetch the member's RFID card
for member in &mut members {
// Look up all RFID cards associated with this member
let rfid_cards = RfidCards::find()
.filter(rfid_cards::Column::MemberId.eq(member.id))
.all(db)
.await?;
// Convert the RFID cards vector from the database model to the local struct model
let rfid_cards: Vec<RfidCard> = rfid_cards.into_iter().map(RfidCard::from).collect();
// Add these cards to the member's rfidCards field
member.rfidCards = rfid_cards;
}
// Put this into the `MultipleMembersStruct` so that the aquired JSON will look as the API demands // Put this into the `MultipleMembersStruct` so that the aquired JSON will look as the API demands
let output = MultipleMembersStruct { members }; let output = MultipleMembersStruct { members };

BIN
test.db

Binary file not shown.