Compare commits
No commits in common. "cde27b56d939fbbcd17a21b904c5a8eecd53c65e" and "59707600553f60fe605a5831e0e38d5464585949" have entirely different histories.
cde27b56d9
...
5970760055
@ -7,11 +7,6 @@ use database::set_up_db;
|
|||||||
mod webserver_member;
|
mod webserver_member;
|
||||||
use webserver_member::*;
|
use webserver_member::*;
|
||||||
|
|
||||||
#[get("/")]
|
|
||||||
fn index() -> &'static str {
|
|
||||||
"Hello, world!\nNothing useful is served here."
|
|
||||||
}
|
|
||||||
|
|
||||||
#[launch]
|
#[launch]
|
||||||
async fn rocket() -> _ {
|
async fn rocket() -> _ {
|
||||||
let db = match set_up_db().await {
|
let db = match set_up_db().await {
|
||||||
|
|||||||
@ -1,22 +1,20 @@
|
|||||||
use rocket::serde::{Serialize, Deserialize};
|
use rocket::serde::{Serialize, Deserialize};
|
||||||
use sea_orm::*;
|
use sea_orm::*;
|
||||||
|
|
||||||
use super::entities::{*};
|
use super::entities::{prelude::*, *};
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize)]
|
#[derive(Serialize, Deserialize)]
|
||||||
pub struct RfidCard {
|
pub struct RfidCard {
|
||||||
#[serde(rename = "cardId")]
|
pub cardId: String,
|
||||||
pub card_id: String,
|
pub cardComment: String
|
||||||
#[serde(rename = "cardComment")]
|
|
||||||
pub card_comment: String
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Implement `.into()` to auto map values from the database model to the local struct
|
// Implement `.into()` to auto map values from the database model to the local struct
|
||||||
impl From<rfid_cards::Model> for RfidCard {
|
impl From<rfid_cards::Model> for RfidCard {
|
||||||
fn from(rfid_card: rfid_cards::Model) -> RfidCard {
|
fn from(rfid_card: rfid_cards::Model) -> RfidCard {
|
||||||
RfidCard {
|
RfidCard {
|
||||||
card_id: rfid_card.card_id,
|
cardId: rfid_card.card_id,
|
||||||
card_comment: rfid_card.card_comment,
|
cardComment: rfid_card.card_comment,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -24,18 +22,13 @@ impl From<rfid_cards::Model> for RfidCard {
|
|||||||
#[derive(Serialize, Deserialize)]
|
#[derive(Serialize, Deserialize)]
|
||||||
pub struct Member {
|
pub struct Member {
|
||||||
pub id: i32,
|
pub id: i32,
|
||||||
#[serde(rename = "ntnuUsername")]
|
pub ntnuUsername: String,
|
||||||
pub ntnu_username: String,
|
pub firstName: String,
|
||||||
#[serde(rename = "firstName")]
|
pub lastName: String,
|
||||||
pub first_name: String,
|
|
||||||
#[serde(rename = "lastName")]
|
|
||||||
pub last_name: String,
|
|
||||||
pub email: String,
|
pub email: String,
|
||||||
pub balance: i32,
|
pub balance: i32,
|
||||||
#[serde(rename = "imagePreference")]
|
pub imagePreference: String,
|
||||||
pub image_preference: String,
|
pub rfidCards: Vec<RfidCard>
|
||||||
#[serde(rename = "lastName")]
|
|
||||||
pub rfid_cards: Vec<RfidCard>
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create the `.into()` functionality to auto map values from the database model to the local struct
|
// Create the `.into()` functionality to auto map values from the database model to the local struct
|
||||||
@ -44,13 +37,13 @@ impl From<members::Model> for Member {
|
|||||||
fn from(member: members::Model) -> Member {
|
fn from(member: members::Model) -> Member {
|
||||||
Member {
|
Member {
|
||||||
id: member.id,
|
id: member.id,
|
||||||
ntnu_username: member.ntnu_username,
|
ntnuUsername: member.ntnu_username,
|
||||||
first_name: member.first_name,
|
firstName: member.first_name,
|
||||||
last_name: member.last_name,
|
lastName: member.last_name,
|
||||||
email: member.email,
|
email: member.email,
|
||||||
balance: member.balance,
|
balance: member.balance,
|
||||||
image_preference: member.image_preference,
|
imagePreference: member.image_preference,
|
||||||
rfid_cards: Vec::new(),
|
rfidCards: Vec::new(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -60,9 +53,9 @@ impl From<members::Model> for MinimalMember {
|
|||||||
fn from(member: members::Model) -> MinimalMember {
|
fn from(member: members::Model) -> MinimalMember {
|
||||||
MinimalMember {
|
MinimalMember {
|
||||||
id: member.id,
|
id: member.id,
|
||||||
ntnu_username: member.ntnu_username,
|
ntnuUsername: member.ntnu_username,
|
||||||
first_name: member.first_name,
|
firstName: member.first_name,
|
||||||
last_name: member.last_name,
|
lastName: member.last_name,
|
||||||
email: member.email,
|
email: member.email,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -72,9 +65,9 @@ impl From<members::Model> for MinimalMember {
|
|||||||
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 {
|
||||||
members::ActiveModel {
|
members::ActiveModel {
|
||||||
ntnu_username: ActiveValue::Set(self.ntnu_username.to_owned()),
|
ntnu_username: ActiveValue::Set(self.ntnuUsername.to_owned()),
|
||||||
first_name: ActiveValue::Set(self.first_name.to_owned()),
|
first_name: ActiveValue::Set(self.firstName.to_owned()),
|
||||||
last_name: ActiveValue::Set(self.last_name.to_owned()),
|
last_name: ActiveValue::Set(self.lastName.to_owned()),
|
||||||
email: ActiveValue::Set(self.email.to_owned()),
|
email: ActiveValue::Set(self.email.to_owned()),
|
||||||
balance: ActiveValue::Set(0),
|
balance: ActiveValue::Set(0),
|
||||||
image_preference: ActiveValue::Set("".to_string()),
|
image_preference: ActiveValue::Set("".to_string()),
|
||||||
@ -86,23 +79,17 @@ impl Into<members::ActiveModel> for rocket::serde::json::Json<MinimalMemberWitho
|
|||||||
#[derive(Serialize, Deserialize)]
|
#[derive(Serialize, Deserialize)]
|
||||||
pub struct MinimalMember {
|
pub struct MinimalMember {
|
||||||
pub id: i32,
|
pub id: i32,
|
||||||
#[serde(rename = "ntnuUsername")]
|
pub ntnuUsername: String,
|
||||||
pub ntnu_username: String,
|
pub firstName: String,
|
||||||
#[serde(rename = "firstName")]
|
pub lastName: String,
|
||||||
pub first_name: String,
|
|
||||||
#[serde(rename = "lastName")]
|
|
||||||
pub last_name: String,
|
|
||||||
pub email: String,
|
pub email: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize)]
|
#[derive(Serialize, Deserialize)]
|
||||||
pub struct MinimalMemberWithoutId {
|
pub struct MinimalMemberWithoutId {
|
||||||
#[serde(rename = "ntnuUsername")]
|
pub ntnuUsername: String,
|
||||||
pub ntnu_username: String,
|
pub firstName: String,
|
||||||
#[serde(rename = "firstName")]
|
pub lastName: String,
|
||||||
pub first_name: String,
|
|
||||||
#[serde(rename = "lastName")]
|
|
||||||
pub last_name: String,
|
|
||||||
pub email: String,
|
pub email: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -15,8 +15,8 @@ use sea_orm::*;
|
|||||||
|
|
||||||
#[derive(Responder)]
|
#[derive(Responder)]
|
||||||
#[response(status = 500, content_type = "text/plain")]
|
#[response(status = 500, content_type = "text/plain")]
|
||||||
pub struct ErrorResponder {
|
struct ErrorResponder {
|
||||||
pub message: String
|
message: String
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<DbErr> for ErrorResponder {
|
impl From<DbErr> for ErrorResponder {
|
||||||
@ -35,6 +35,11 @@ impl From<&str> for ErrorResponder {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[get("/")]
|
||||||
|
pub fn index() -> &'static str {
|
||||||
|
"Hello, world!\nNothing useful is served here."
|
||||||
|
}
|
||||||
|
|
||||||
#[get("/members")]
|
#[get("/members")]
|
||||||
pub async fn get_members(db: &State<DatabaseConnection>) -> Result<Json<MultipleMembersStruct>, ErrorResponder> {
|
pub async fn get_members(db: &State<DatabaseConnection>) -> Result<Json<MultipleMembersStruct>, ErrorResponder> {
|
||||||
let db = db as &DatabaseConnection;
|
let db = db as &DatabaseConnection;
|
||||||
@ -57,7 +62,7 @@ pub async fn get_members(db: &State<DatabaseConnection>) -> Result<Json<Multiple
|
|||||||
let rfid_cards: Vec<RfidCard> = rfid_cards.into_iter().map(RfidCard::from).collect();
|
let rfid_cards: Vec<RfidCard> = rfid_cards.into_iter().map(RfidCard::from).collect();
|
||||||
|
|
||||||
// Add these cards to the member's rfidCards field
|
// Add these cards to the member's rfidCards field
|
||||||
member.rfid_cards = rfid_cards;
|
member.rfidCards = rfid_cards;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -75,7 +80,7 @@ pub async fn add_member(db: &State<DatabaseConnection>, minimal_member_without_i
|
|||||||
|
|
||||||
// Check if a member with the same NTNU username already exists
|
// Check if a member with the same NTNU username already exists
|
||||||
let matching_member: Option<members::Model> = Members::find() // Find a member in the "Members" table
|
let matching_member: Option<members::Model> = Members::find() // Find a member in the "Members" table
|
||||||
.filter(members::Column::NtnuUsername.eq(minimal_member_without_id.ntnu_username.to_owned())) // Filter by the provided username in the NtnuUsername column
|
.filter(members::Column::NtnuUsername.eq(minimal_member_without_id.ntnuUsername.to_owned())) // Filter by the provided username in the NtnuUsername column
|
||||||
.one(db) // We only care about one result
|
.one(db) // We only care about one result
|
||||||
.await?; // Wait for the result
|
.await?; // Wait for the result
|
||||||
|
|
||||||
@ -113,19 +118,19 @@ pub async fn add_member(db: &State<DatabaseConnection>, minimal_member_without_i
|
|||||||
Ok(Json(member))
|
Ok(Json(member))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[get("/member/<member_id>")]
|
#[get("/member/<memberId>")]
|
||||||
pub async fn get_member_by_id(db: &State<DatabaseConnection>, member_id: i32) -> Result<Json<Member>, ErrorResponder> {
|
pub async fn get_member_by_id(db: &State<DatabaseConnection>, memberId: i32) -> Result<Json<Member>, ErrorResponder> {
|
||||||
let db = db as &DatabaseConnection;
|
let db = db as &DatabaseConnection;
|
||||||
|
|
||||||
// Create an empty variable to store the resulting member info
|
// Create an empty variable to store the resulting member info
|
||||||
let database_member;
|
let database_member;
|
||||||
// Search the database for the member based on the ID
|
// Search the database for the member based on the ID
|
||||||
match Members::find_by_id(member_id).one(db).await? {
|
match Members::find_by_id(memberId).one(db).await? {
|
||||||
Some(model) => database_member = model, // If the member is found, add the info to the previously created variable
|
Some(model) => database_member = model, // If the member is found, add the info to the previously created variable
|
||||||
None => {
|
None => {
|
||||||
return Err(
|
return Err(
|
||||||
ErrorResponder {
|
ErrorResponder {
|
||||||
message: format!("Failed to fetch member by ID. memberId: {}", member_id) // If it is not found return with this error
|
message: format!("Failed to fetch member by ID. memberId: {}", memberId) // If it is not found return with this error
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
@ -137,7 +142,7 @@ pub async fn get_member_by_id(db: &State<DatabaseConnection>, member_id: i32) ->
|
|||||||
|
|
||||||
// Create a member from the database model and append the RFID cards
|
// Create a member from the database model and append the RFID cards
|
||||||
let mut member: Member = database_member.into();
|
let mut member: Member = database_member.into();
|
||||||
member.rfid_cards = rfids;
|
member.rfidCards = rfids;
|
||||||
|
|
||||||
Ok(Json(member))
|
Ok(Json(member))
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue
Block a user