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,
|
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
|
||||||
])
|
])
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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")]
|
||||||
|
|||||||
@ -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))
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user