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 1e97c86..9caad0b 100644 Binary files a/test.db and b/test.db differ