From cde27b56d939fbbcd17a21b904c5a8eecd53c65e Mon Sep 17 00:00:00 2001 From: "Sebastian H. Gabrielli" Date: Mon, 25 Dec 2023 15:58:18 +0100 Subject: [PATCH] Add serde renames and make structs use proper rust variable names --- src/models/member.rs | 67 ++++++++++++++++++++++++----------------- src/webserver_member.rs | 14 ++++----- 2 files changed, 47 insertions(+), 34 deletions(-) diff --git a/src/models/member.rs b/src/models/member.rs index a602bce..740f690 100644 --- a/src/models/member.rs +++ b/src/models/member.rs @@ -1,20 +1,22 @@ use rocket::serde::{Serialize, Deserialize}; use sea_orm::*; -use super::entities::{prelude::*, *}; +use super::entities::{*}; #[derive(Serialize, Deserialize)] pub struct RfidCard { - pub cardId: String, - pub cardComment: String + #[serde(rename = "cardId")] + pub card_id: String, + #[serde(rename = "cardComment")] + pub card_comment: String } // Implement `.into()` to auto map values from the database model to the local struct impl From for RfidCard { fn from(rfid_card: rfid_cards::Model) -> RfidCard { RfidCard { - cardId: rfid_card.card_id, - cardComment: rfid_card.card_comment, + card_id: rfid_card.card_id, + card_comment: rfid_card.card_comment, } } } @@ -22,13 +24,18 @@ impl From for RfidCard { #[derive(Serialize, Deserialize)] pub struct Member { pub id: i32, - pub ntnuUsername: String, - pub firstName: String, - pub lastName: String, + #[serde(rename = "ntnuUsername")] + pub ntnu_username: String, + #[serde(rename = "firstName")] + pub first_name: String, + #[serde(rename = "lastName")] + pub last_name: String, pub email: String, pub balance: i32, - pub imagePreference: String, - pub rfidCards: Vec + #[serde(rename = "imagePreference")] + pub image_preference: String, + #[serde(rename = "lastName")] + pub rfid_cards: Vec } // Create the `.into()` functionality to auto map values from the database model to the local struct @@ -37,13 +44,13 @@ impl From for Member { fn from(member: members::Model) -> Member { Member { id: member.id, - ntnuUsername: member.ntnu_username, - firstName: member.first_name, - lastName: member.last_name, + ntnu_username: member.ntnu_username, + first_name: member.first_name, + last_name: member.last_name, email: member.email, balance: member.balance, - imagePreference: member.image_preference, - rfidCards: Vec::new(), + image_preference: member.image_preference, + rfid_cards: Vec::new(), } } } @@ -53,9 +60,9 @@ impl From for MinimalMember { fn from(member: members::Model) -> MinimalMember { MinimalMember { id: member.id, - ntnuUsername: member.ntnu_username, - firstName: member.first_name, - lastName: member.last_name, + ntnu_username: member.ntnu_username, + first_name: member.first_name, + last_name: member.last_name, email: member.email, } } @@ -65,9 +72,9 @@ impl From for MinimalMember { impl Into for rocket::serde::json::Json { fn into(self) -> members::ActiveModel { members::ActiveModel { - ntnu_username: ActiveValue::Set(self.ntnuUsername.to_owned()), - first_name: ActiveValue::Set(self.firstName.to_owned()), - last_name: ActiveValue::Set(self.lastName.to_owned()), + ntnu_username: ActiveValue::Set(self.ntnu_username.to_owned()), + first_name: ActiveValue::Set(self.first_name.to_owned()), + last_name: ActiveValue::Set(self.last_name.to_owned()), email: ActiveValue::Set(self.email.to_owned()), balance: ActiveValue::Set(0), image_preference: ActiveValue::Set("".to_string()), @@ -79,17 +86,23 @@ impl Into for rocket::serde::json::Json) -> Result = rfid_cards.into_iter().map(RfidCard::from).collect(); // Add these cards to the member's rfidCards field - member.rfidCards = rfid_cards; + member.rfid_cards = rfid_cards; } @@ -75,7 +75,7 @@ pub async fn add_member(db: &State, minimal_member_without_i // Check if a member with the same NTNU username already exists let matching_member: Option = Members::find() // Find a member in the "Members" table - .filter(members::Column::NtnuUsername.eq(minimal_member_without_id.ntnuUsername.to_owned())) // Filter by the provided username in the NtnuUsername column + .filter(members::Column::NtnuUsername.eq(minimal_member_without_id.ntnu_username.to_owned())) // Filter by the provided username in the NtnuUsername column .one(db) // We only care about one result .await?; // Wait for the result @@ -113,19 +113,19 @@ pub async fn add_member(db: &State, minimal_member_without_i Ok(Json(member)) } -#[get("/member/")] -pub async fn get_member_by_id(db: &State, memberId: i32) -> Result, ErrorResponder> { +#[get("/member/")] +pub async fn get_member_by_id(db: &State, member_id: i32) -> Result, ErrorResponder> { let db = db as &DatabaseConnection; // Create an empty variable to store the resulting member info let database_member; // Search the database for the member based on the ID - match Members::find_by_id(memberId).one(db).await? { + match Members::find_by_id(member_id).one(db).await? { Some(model) => database_member = model, // If the member is found, add the info to the previously created variable None => { return Err( ErrorResponder { - message: format!("Failed to fetch member by ID. memberId: {}", memberId) // If it is not found return with this error + message: format!("Failed to fetch member by ID. memberId: {}", member_id) // If it is not found return with this error } ); }, @@ -137,7 +137,7 @@ pub async fn get_member_by_id(db: &State, memberId: i32) -> // Create a member from the database model and append the RFID cards let mut member: Member = database_member.into(); - member.rfidCards = rfids; + member.rfid_cards = rfids; Ok(Json(member)) } \ No newline at end of file