Implemented all RFID card functionality
This commit is contained in:
parent
053fc6a545
commit
603b57b303
@ -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
|
||||
])
|
||||
}
|
||||
|
||||
@ -3,6 +3,12 @@ use sea_orm::*;
|
||||
|
||||
use super::entities::{*};
|
||||
|
||||
#[derive(Serialize, Deserialize)]
|
||||
pub struct MultipleRfidCards {
|
||||
#[serde(rename = "rfidCards")]
|
||||
pub rfid_cards: Vec<RfidCard>
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize)]
|
||||
pub struct RfidCard {
|
||||
#[serde(rename = "cardId")]
|
||||
|
||||
@ -287,4 +287,46 @@ pub async fn update_member_image_preference_by_id(db: &State<DatabaseConnection>
|
||||
};
|
||||
|
||||
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))
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user