Compare commits
No commits in common. "603b57b303929a3532bfcd58fed4c61719721b47" and "cde27b56d939fbbcd17a21b904c5a8eecd53c65e" have entirely different histories.
603b57b303
...
cde27b56d9
@ -25,13 +25,6 @@ async fn rocket() -> _ {
|
|||||||
index,
|
index,
|
||||||
get_member_by_id,
|
get_member_by_id,
|
||||||
add_member,
|
add_member,
|
||||||
get_members,
|
get_members
|
||||||
update_member_by_id,
|
|
||||||
get_member_balance_by_id,
|
|
||||||
update_member_balance_by_id,
|
|
||||||
get_member_image_preference_by_id,
|
|
||||||
update_member_image_preference_by_id,
|
|
||||||
get_member_rfid_by_id,
|
|
||||||
add_member_rfid_by_id
|
|
||||||
])
|
])
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,12 +3,6 @@ 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")]
|
||||||
@ -27,7 +21,7 @@ impl From<rfid_cards::Model> for RfidCard {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, Default)]
|
#[derive(Serialize, Deserialize)]
|
||||||
pub struct Member {
|
pub struct Member {
|
||||||
pub id: i32,
|
pub id: i32,
|
||||||
#[serde(rename = "ntnuUsername")]
|
#[serde(rename = "ntnuUsername")]
|
||||||
@ -61,18 +55,6 @@ impl From<members::Model> for Member {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize)]
|
|
||||||
pub struct MinimalMember {
|
|
||||||
pub id: i32,
|
|
||||||
#[serde(rename = "ntnuUsername")]
|
|
||||||
pub ntnu_username: String,
|
|
||||||
#[serde(rename = "firstName")]
|
|
||||||
pub first_name: String,
|
|
||||||
#[serde(rename = "lastName")]
|
|
||||||
pub last_name: String,
|
|
||||||
pub email: String,
|
|
||||||
}
|
|
||||||
|
|
||||||
// Implement DB Member Model -> MinimalMember
|
// Implement DB Member Model -> MinimalMember
|
||||||
impl From<members::Model> for MinimalMember {
|
impl From<members::Model> for MinimalMember {
|
||||||
fn from(member: members::Model) -> MinimalMember {
|
fn from(member: members::Model) -> MinimalMember {
|
||||||
@ -86,17 +68,6 @@ impl From<members::Model> for MinimalMember {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize)]
|
|
||||||
pub struct MinimalMemberWithoutId {
|
|
||||||
#[serde(rename = "ntnuUsername")]
|
|
||||||
pub ntnu_username: String,
|
|
||||||
#[serde(rename = "firstName")]
|
|
||||||
pub first_name: String,
|
|
||||||
#[serde(rename = "lastName")]
|
|
||||||
pub last_name: String,
|
|
||||||
pub email: String,
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create the functionality to create a database model member from the local struct model member
|
// Create the functionality to create a database model member from the local struct model member
|
||||||
impl Into<members::ActiveModel> for rocket::serde::json::Json<MinimalMemberWithoutId> {
|
impl Into<members::ActiveModel> for rocket::serde::json::Json<MinimalMemberWithoutId> {
|
||||||
fn into(self) -> members::ActiveModel {
|
fn into(self) -> members::ActiveModel {
|
||||||
@ -112,19 +83,30 @@ impl Into<members::ActiveModel> for rocket::serde::json::Json<MinimalMemberWitho
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize)]
|
||||||
|
pub struct MinimalMember {
|
||||||
|
pub id: i32,
|
||||||
|
#[serde(rename = "ntnuUsername")]
|
||||||
|
pub ntnu_username: String,
|
||||||
|
#[serde(rename = "firstName")]
|
||||||
|
pub first_name: String,
|
||||||
|
#[serde(rename = "lastName")]
|
||||||
|
pub last_name: String,
|
||||||
|
pub email: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize)]
|
||||||
|
pub struct MinimalMemberWithoutId {
|
||||||
|
#[serde(rename = "ntnuUsername")]
|
||||||
|
pub ntnu_username: String,
|
||||||
|
#[serde(rename = "firstName")]
|
||||||
|
pub first_name: String,
|
||||||
|
#[serde(rename = "lastName")]
|
||||||
|
pub last_name: String,
|
||||||
|
pub email: String,
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
pub struct MultipleMembersStruct {
|
pub struct MultipleMembersStruct {
|
||||||
pub members: Vec<Member>,
|
pub members: Vec<Member>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#[derive(Deserialize, Serialize)]
|
|
||||||
pub struct Balance {
|
|
||||||
pub balance: i32
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Deserialize, Serialize)]
|
|
||||||
pub struct ImagePreference {
|
|
||||||
#[serde(rename = "imagePreference")]
|
|
||||||
pub image_preference: String
|
|
||||||
}
|
|
||||||
@ -140,193 +140,4 @@ pub async fn get_member_by_id(db: &State<DatabaseConnection>, member_id: i32) ->
|
|||||||
member.rfid_cards = rfids;
|
member.rfid_cards = rfids;
|
||||||
|
|
||||||
Ok(Json(member))
|
Ok(Json(member))
|
||||||
}
|
|
||||||
|
|
||||||
#[put("/member/<member_id>", data="<minimal_member_without_id>")]
|
|
||||||
pub async fn update_member_by_id(db: &State<DatabaseConnection>, minimal_member_without_id: Json<MinimalMemberWithoutId>, member_id: i32) -> Result<Json<Member>, ErrorResponder> {
|
|
||||||
let db = db as &DatabaseConnection;
|
|
||||||
|
|
||||||
// Fetch the current member info from the DB
|
|
||||||
let current_member_info: members::Model;
|
|
||||||
match Members::find_by_id(member_id).one(db).await? {
|
|
||||||
Some(m) => current_member_info = m,
|
|
||||||
None => return Err (ErrorResponder { message: format!("Could not find member with the spcified ID. ID: {}", member_id) }),
|
|
||||||
}
|
|
||||||
|
|
||||||
// Put all the received info into a new member thingie
|
|
||||||
let new_member_info: members::ActiveModel = minimal_member_without_id.into();
|
|
||||||
|
|
||||||
// Combine the two
|
|
||||||
let resulting_member: members::ActiveModel = members::ActiveModel {
|
|
||||||
id: ActiveValue::Set(current_member_info.id),
|
|
||||||
ntnu_username: new_member_info.ntnu_username,
|
|
||||||
first_name: new_member_info.first_name,
|
|
||||||
last_name: new_member_info.last_name,
|
|
||||||
email: new_member_info.email,
|
|
||||||
balance: ActiveValue::Set(current_member_info.balance),
|
|
||||||
image_preference: ActiveValue::Set(current_member_info.image_preference),
|
|
||||||
};
|
|
||||||
|
|
||||||
// Update the DB entry for the user
|
|
||||||
resulting_member.update(db).await?;
|
|
||||||
|
|
||||||
// Fetch the member's info back from the DB
|
|
||||||
let current_member_info: members::Model;
|
|
||||||
match Members::find_by_id(member_id).one(db).await? {
|
|
||||||
Some(m) => current_member_info = m,
|
|
||||||
None => return Err (ErrorResponder { message: format!("Could not find member with the spcified ID. ID: {}", member_id) }),
|
|
||||||
}
|
|
||||||
|
|
||||||
// Turn it into the native model
|
|
||||||
let member: Member = current_member_info.into();
|
|
||||||
|
|
||||||
Ok(Json(member))
|
|
||||||
}
|
|
||||||
|
|
||||||
#[get("/member/<member_id>/balance")]
|
|
||||||
pub async fn get_member_balance_by_id(db: &State<DatabaseConnection>, member_id: i32) -> Result<Json<Balance>, ErrorResponder> {
|
|
||||||
let db = db as &DatabaseConnection;
|
|
||||||
|
|
||||||
// Fetch the member's info from the BD
|
|
||||||
let member: members::Model;
|
|
||||||
match Members::find_by_id(member_id).one(db).await? {
|
|
||||||
Some(m) => member = m,
|
|
||||||
None => return Err (ErrorResponder { message: format!("Could not find member with the spcified ID. ID: {}", member_id) }),
|
|
||||||
}
|
|
||||||
|
|
||||||
// Extract the balance
|
|
||||||
let balance: Balance = Balance {
|
|
||||||
balance: member.balance.to_owned()
|
|
||||||
};
|
|
||||||
|
|
||||||
// Return the balance
|
|
||||||
Ok(Json(balance))
|
|
||||||
}
|
|
||||||
|
|
||||||
#[put("/member/<member_id>/balance", data="<balance>")]
|
|
||||||
pub async fn update_member_balance_by_id(db: &State<DatabaseConnection>, member_id: i32, balance: Json<Balance>) -> Result<Json<Balance>, ErrorResponder> {
|
|
||||||
let db = db as &DatabaseConnection;
|
|
||||||
|
|
||||||
// Fetch the current member info from the DB
|
|
||||||
let current_member_info: members::Model;
|
|
||||||
match Members::find_by_id(member_id).one(db).await? {
|
|
||||||
Some(m) => current_member_info = m,
|
|
||||||
None => return Err (ErrorResponder { message: format!("Could not find member with the spcified ID. ID: {}", member_id) }),
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create a new DB thingie from the fetched info
|
|
||||||
let mut resulting_member: members::ActiveModel = current_member_info.clone().into();
|
|
||||||
resulting_member.balance = ActiveValue::Set(current_member_info.balance + balance.balance);
|
|
||||||
|
|
||||||
// Update the DB entry for the user
|
|
||||||
resulting_member.update(db).await?;
|
|
||||||
|
|
||||||
// Fetch the member's info back from the DB
|
|
||||||
let current_member_info: members::Model;
|
|
||||||
match Members::find_by_id(member_id).one(db).await? {
|
|
||||||
Some(m) => current_member_info = m,
|
|
||||||
None => return Err (ErrorResponder { message: format!("Could not find member with the spcified ID. ID: {}", member_id) }),
|
|
||||||
}
|
|
||||||
|
|
||||||
// Turn it into the native model
|
|
||||||
let balance: Balance = Balance {
|
|
||||||
balance: current_member_info.balance,
|
|
||||||
};
|
|
||||||
|
|
||||||
Ok(Json(balance))
|
|
||||||
}
|
|
||||||
|
|
||||||
#[get("/member/<member_id>/imagePreference")]
|
|
||||||
pub async fn get_member_image_preference_by_id(db: &State<DatabaseConnection>, member_id: i32) -> Result<Json<ImagePreference>, ErrorResponder> {
|
|
||||||
let db = db as &DatabaseConnection;
|
|
||||||
|
|
||||||
// Fetch the member's info from the BD
|
|
||||||
let member: members::Model;
|
|
||||||
match Members::find_by_id(member_id).one(db).await? {
|
|
||||||
Some(m) => member = m,
|
|
||||||
None => return Err (ErrorResponder { message: format!("Could not find member with the spcified ID. ID: {}", member_id) }),
|
|
||||||
}
|
|
||||||
|
|
||||||
// Extract the balance
|
|
||||||
let image_preference: ImagePreference = ImagePreference {
|
|
||||||
image_preference: member.image_preference.to_owned()
|
|
||||||
};
|
|
||||||
|
|
||||||
// Return the balance
|
|
||||||
Ok(Json(image_preference))
|
|
||||||
}
|
|
||||||
|
|
||||||
#[put("/member/<member_id>/imagePreference", data="<image_preference>")]
|
|
||||||
pub async fn update_member_image_preference_by_id(db: &State<DatabaseConnection>, member_id: i32, image_preference: Json<ImagePreference>) -> Result<Json<ImagePreference>, ErrorResponder> {
|
|
||||||
let db = db as &DatabaseConnection;
|
|
||||||
|
|
||||||
// Fetch the current member info from the DB
|
|
||||||
let current_member_info: members::Model;
|
|
||||||
match Members::find_by_id(member_id).one(db).await? {
|
|
||||||
Some(m) => current_member_info = m,
|
|
||||||
None => return Err (ErrorResponder { message: format!("Could not find member with the spcified ID. ID: {}", member_id) }),
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create a new DB thingie from the fetched info
|
|
||||||
let mut resulting_member: members::ActiveModel = current_member_info.clone().into();
|
|
||||||
resulting_member.image_preference = ActiveValue::Set(image_preference.image_preference.clone());
|
|
||||||
|
|
||||||
// Update the DB entry for the user
|
|
||||||
resulting_member.update(db).await?;
|
|
||||||
|
|
||||||
// Fetch the member's info back from the DB
|
|
||||||
let current_member_info: members::Model;
|
|
||||||
match Members::find_by_id(member_id).one(db).await? {
|
|
||||||
Some(m) => current_member_info = m,
|
|
||||||
None => return Err (ErrorResponder { message: format!("Could not find member with the spcified ID. ID: {}", member_id) }),
|
|
||||||
}
|
|
||||||
|
|
||||||
// Turn it into the native model
|
|
||||||
let image_preference: ImagePreference = ImagePreference {
|
|
||||||
image_preference: current_member_info.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