diff --git a/src/main.rs b/src/main.rs index cdf82fe..06458e9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -32,6 +32,23 @@ struct Member { rfidCards: Vec } +// 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<::Model> for Member { + fn from(member: ::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)] struct MinimalMember { id: i32, @@ -49,6 +66,11 @@ struct MinimalMemberWithoutId { email: String, } +#[derive(Serialize)] +struct MultipleMembersStruct { + members: Vec, +} + #[derive(Responder)] #[response(status = 500, content_type = "text/plain")] struct ErrorResponder { @@ -76,6 +98,24 @@ fn index() -> &'static str { "Hello, world!\nNothing useful is served here." } +#[get("/members")] +async fn get_members(db: &State) -> Result, 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 = 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 = "")] async fn add_member(db: &State, minimalMemberWithoutId: Json) -> Result, ErrorResponder> { // Grab the database connection @@ -183,6 +223,7 @@ async fn rocket() -> _ { .mount("/", routes![ index, get_member_by_id, - add_member + add_member, + get_members ]) } diff --git a/test.db b/test.db index 37c362b..421baaf 100644 Binary files a/test.db and b/test.db differ