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>
|
||||
}
|
||||
|
||||
// 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)]
|
||||
struct MinimalMember {
|
||||
id: i32,
|
||||
@ -49,6 +66,11 @@ struct MinimalMemberWithoutId {
|
||||
email: String,
|
||||
}
|
||||
|
||||
#[derive(Serialize)]
|
||||
struct MultipleMembersStruct {
|
||||
members: Vec<Member>,
|
||||
}
|
||||
|
||||
#[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<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>")]
|
||||
async fn add_member(db: &State<DatabaseConnection>, minimalMemberWithoutId: Json<MinimalMemberWithoutId>) -> Result<Json<MinimalMember>, 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
|
||||
])
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user