Implement get_members
This commit is contained in:
parent
bf84ff6e33
commit
8b704120d2
43
src/main.rs
43
src/main.rs
@ -32,6 +32,23 @@ struct Member {
|
|||||||
rfidCards: Vec<RfidCard>
|
rfidCards: Vec<RfidCard>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Create the `.into()` functionality to auto map values from the database model to the local struct
|
||||||
|
// Don't be scared by the long model name, I typed `Members::Model` and applied the auto fix vscode suggested
|
||||||
|
impl From<<entities::members::Entity as sea_orm::EntityTrait>::Model> for Member {
|
||||||
|
fn from(member: <entities::members::Entity as sea_orm::EntityTrait>::Model) -> Member {
|
||||||
|
Member {
|
||||||
|
id: member.id,
|
||||||
|
ntnuUsername: member.ntnu_username,
|
||||||
|
firstName: member.first_name,
|
||||||
|
lastName: member.last_name,
|
||||||
|
email: member.email,
|
||||||
|
balance: member.balance,
|
||||||
|
imagePreference: member.image_preference,
|
||||||
|
rfidCards: Vec::new(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize)]
|
#[derive(Serialize, Deserialize)]
|
||||||
struct MinimalMember {
|
struct MinimalMember {
|
||||||
id: i32,
|
id: i32,
|
||||||
@ -49,6 +66,11 @@ struct MinimalMemberWithoutId {
|
|||||||
email: String,
|
email: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize)]
|
||||||
|
struct MultipleMembersStruct {
|
||||||
|
members: Vec<Member>,
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Responder)]
|
#[derive(Responder)]
|
||||||
#[response(status = 500, content_type = "text/plain")]
|
#[response(status = 500, content_type = "text/plain")]
|
||||||
struct ErrorResponder {
|
struct ErrorResponder {
|
||||||
@ -76,6 +98,24 @@ fn index() -> &'static str {
|
|||||||
"Hello, world!\nNothing useful is served here."
|
"Hello, world!\nNothing useful is served here."
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[get("/members")]
|
||||||
|
async fn get_members(db: &State<DatabaseConnection>) -> Result<Json<MultipleMembersStruct>, ErrorResponder> {
|
||||||
|
let db = db as &DatabaseConnection;
|
||||||
|
|
||||||
|
// Get a list of all members from the database
|
||||||
|
let members = Members::find().all(db).await?;
|
||||||
|
|
||||||
|
// Convert this vector from the database model to the local struct model
|
||||||
|
let members: Vec<Member> = members.into_iter().map(Member::from).collect();
|
||||||
|
// TODO: Add the member's RFID card
|
||||||
|
|
||||||
|
// Put this into the `MultipleMembersStruct` so that the aquired JSON will look as the API demands
|
||||||
|
let output = MultipleMembersStruct { members };
|
||||||
|
|
||||||
|
// Return the output
|
||||||
|
Ok(Json(output))
|
||||||
|
}
|
||||||
|
|
||||||
#[post("/member", data = "<minimalMemberWithoutId>")]
|
#[post("/member", data = "<minimalMemberWithoutId>")]
|
||||||
async fn add_member(db: &State<DatabaseConnection>, minimalMemberWithoutId: Json<MinimalMemberWithoutId>) -> Result<Json<MinimalMember>, ErrorResponder> {
|
async fn add_member(db: &State<DatabaseConnection>, minimalMemberWithoutId: Json<MinimalMemberWithoutId>) -> Result<Json<MinimalMember>, ErrorResponder> {
|
||||||
// Grab the database connection
|
// Grab the database connection
|
||||||
@ -183,6 +223,7 @@ async fn rocket() -> _ {
|
|||||||
.mount("/", routes![
|
.mount("/", routes![
|
||||||
index,
|
index,
|
||||||
get_member_by_id,
|
get_member_by_id,
|
||||||
add_member
|
add_member,
|
||||||
|
get_members
|
||||||
])
|
])
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user