Implemented all RFID card functionality

This commit is contained in:
Sebastian H. Gabrielli 2023-12-25 17:58:43 +01:00
parent 053fc6a545
commit 603b57b303
4 changed files with 51 additions and 1 deletions

View File

@ -30,6 +30,8 @@ async fn rocket() -> _ {
get_member_balance_by_id, get_member_balance_by_id,
update_member_balance_by_id, update_member_balance_by_id,
get_member_image_preference_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
]) ])
} }

View File

@ -3,6 +3,12 @@ use sea_orm::*;
use super::entities::{*}; use super::entities::{*};
#[derive(Serialize, Deserialize)]
pub struct MultipleRfidCards {
#[serde(rename = "rfidCards")]
pub rfid_cards: Vec<RfidCard>
}
#[derive(Serialize, Deserialize)] #[derive(Serialize, Deserialize)]
pub struct RfidCard { pub struct RfidCard {
#[serde(rename = "cardId")] #[serde(rename = "cardId")]

View File

@ -288,3 +288,45 @@ pub async fn update_member_image_preference_by_id(db: &State<DatabaseConnection>
Ok(Json(image_preference)) Ok(Json(image_preference))
} }
#[get("/member/<member_id>/rfid")]
pub async fn get_member_rfid_by_id(db: &State<DatabaseConnection>, member_id: i32) -> Result<Json<MultipleRfidCards>, 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<RfidCard> = 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/<member_id>/rfid", data="<rfid_card_info>")]
pub async fn add_member_rfid_by_id(db: &State<DatabaseConnection>, member_id: i32, rfid_card_info: Json<RfidCard>) -> Result<Json<RfidCard>, 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))
}

BIN
test.db

Binary file not shown.