From b038811b58a9400ec49ef239445f8474bde1e51c Mon Sep 17 00:00:00 2001 From: "Sebastian H. Gabrielli" Date: Mon, 25 Dec 2023 13:11:36 +0100 Subject: [PATCH] Implement rfid card lookup in get_members --- src/main.rs | 29 +++++++++++++++++++++++++++-- test.db | Bin 32768 -> 32768 bytes 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/main.rs b/src/main.rs index 06458e9..3c4dac8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -20,6 +20,16 @@ struct RfidCard { cardComment: String } +// Implement `.into()` to auto map values from the database model to the local struct +impl From<::Model> for RfidCard { + fn from(rfid_card: ::Model) -> RfidCard { + RfidCard { + cardId: rfid_card.card_id, + cardComment: rfid_card.card_comment, + } + } +} + #[derive(Serialize, Deserialize)] struct Member { id: i32, @@ -106,8 +116,23 @@ async fn get_members(db: &State) -> Result = members.into_iter().map(Member::from).collect(); - // TODO: Add the member's RFID card + let mut members: Vec = members.into_iter().map(Member::from).collect(); + + // 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 = 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 let output = MultipleMembersStruct { members }; diff --git a/test.db b/test.db index 421baaf3263ac69e5cb8eb17c36e47c235821eba..c34eab266dfdf3e712fd118b12d129a572988e22 100644 GIT binary patch delta 105 zcmZo@U}|V!njp<6I8nx#Rggh1+-qaX0(&+_{#OkAuQmtrKj2poVPp|i