From 603b57b303929a3532bfcd58fed4c61719721b47 Mon Sep 17 00:00:00 2001 From: "Sebastian H. Gabrielli" Date: Mon, 25 Dec 2023 17:58:43 +0100 Subject: [PATCH] Implemented all RFID card functionality --- src/main.rs | 4 +++- src/models/member.rs | 6 ++++++ src/webserver_member.rs | 42 ++++++++++++++++++++++++++++++++++++++++ test.db | Bin 32768 -> 32768 bytes 4 files changed, 51 insertions(+), 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index f7e2749..bde83f0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -30,6 +30,8 @@ async fn rocket() -> _ { get_member_balance_by_id, update_member_balance_by_id, get_member_image_preference_by_id, - update_member_image_preference_by_id + update_member_image_preference_by_id, + get_member_rfid_by_id, + add_member_rfid_by_id ]) } diff --git a/src/models/member.rs b/src/models/member.rs index 71bfeb6..3ce51f8 100644 --- a/src/models/member.rs +++ b/src/models/member.rs @@ -3,6 +3,12 @@ use sea_orm::*; use super::entities::{*}; +#[derive(Serialize, Deserialize)] +pub struct MultipleRfidCards { + #[serde(rename = "rfidCards")] + pub rfid_cards: Vec +} + #[derive(Serialize, Deserialize)] pub struct RfidCard { #[serde(rename = "cardId")] diff --git a/src/webserver_member.rs b/src/webserver_member.rs index 38dcce1..995f24c 100644 --- a/src/webserver_member.rs +++ b/src/webserver_member.rs @@ -287,4 +287,46 @@ pub async fn update_member_image_preference_by_id(db: &State }; Ok(Json(image_preference)) +} + +#[get("/member//rfid")] +pub async fn get_member_rfid_by_id(db: &State, member_id: i32) -> Result, ErrorResponder> { + let db = db as &DatabaseConnection; + + // 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(); + + // Create a response struct + let result: MultipleRfidCards = MultipleRfidCards { rfid_cards }; + + // Return the balance + Ok(Json(result)) +} + +#[post("/member//rfid", data="")] +pub async fn add_member_rfid_by_id(db: &State, member_id: i32, rfid_card_info: Json) -> Result, ErrorResponder> { + let db = db as &DatabaseConnection; + + let rfid_card: rfid_cards::ActiveModel = rfid_cards::ActiveModel { + card_id: ActiveValue::Set(rfid_card_info.card_id.to_owned()), + card_comment: ActiveValue::Set(rfid_card_info.card_comment.to_owned()), + member_id: ActiveValue::Set(member_id.into()) + }; + let res = RfidCards::insert(rfid_card).exec(db).await?; + + let fetched_rfid_card; + match RfidCards::find_by_id(res.last_insert_id).one(db).await? { + Some(rfid_card) => fetched_rfid_card = rfid_card, + None => return Err( ErrorResponder { message: format!("Failed to add RFID card.") } ) + } + + let returned_rfid: RfidCard = fetched_rfid_card.into(); + + Ok(Json(returned_rfid)) } \ No newline at end of file diff --git a/test.db b/test.db index 1e97c86a3bd0143a6d22b9e588828319bca486c2..9caad0b3c5b220496e5724849f07486884c2d8bf 100644 GIT binary patch delta 470 zcmZo@U}|V!njkGG#lXP80maNfns1_xv9uI}UeN+xeisH7UKs|yPrUDVW%y6?SMXQx zeBT_%pU*w{CASX?zYF8eiH%q5fyy2LH9|q7KO4Kaq9S8cW=UdFPHItFW=ec=Vo^#l zg2m<>)QQ{17jR;Zj^9SNkA0Hj4gmZpwZfaf$ zL>45No0yuLlv)&@3Dn`~7vk#f8Uz#$2=erG42o3nc8%148K?;qck>T&^>p`xi08s} zYAOV|y153q`Z>D>D=0z4iNYU8_CGnKC!Wx$(Vg|9k2T2TfE$i?27~W z1r{kNfT&3dEF4Vyrx^I3@}B|*&^~@ANhTIWWljTQGZP~dOEU|T;F8i5pu4m4i%KLJ zQKXEKq_}{A$i)Acf&UZ#W1u1b4(E?uHXAG=7>lyey@xJ3(&%2SghPQ_2 z`({RgeD29FxqT*1sLE>eVqq6oRAg+5FG)lUEJ`UxuvndgTpdGP6+#@H zd|VX};tCpE3P1o-?U|ww;u;a65D?_)>lhTN;O!cz1DABp&&^HEE1A5IPb4rmH8&}> zC_Xbq!P76q)!j8nA=J+^Fw_;I+RZ=6)zjS%q+LM+u2fSY$koj?$kor;HCO>6TCAXv znWD+1Y0NhHEWbLR5yDaI#;iagBThDc7jU33Y<|ZZ$;h||=;{Cb6DRCkq@cjX3k)Pi z{#OkAuYjTt_!UGLSwvMiOHzwVKv*Fe;$AMWsviveKY*&<@e8pti-Ofa#Q!kx{{f1B Y;^$#z=Hvt_1p&s*JOy9)CkC(p0O>4pmjD0&