Add /family/{id}/users route

This commit is contained in:
2023-06-21 17:01:52 +02:00
parent 381a4797e4
commit ad54f83c2c
5 changed files with 48 additions and 8 deletions

View File

@@ -5,6 +5,7 @@ use crate::models::{
Family, FamilyID, FamilyMembership, Membership, NewFamily, NewMembership, UserID,
};
use crate::schema::{families, memberships};
use crate::services::users_service;
use crate::utils::string_utils::rand_str;
use crate::utils::time_utils::time;
use diesel::prelude::*;
@@ -88,6 +89,36 @@ pub async fn get_membership(family_id: FamilyID, user_id: UserID) -> anyhow::Res
})
}
#[derive(serde::Serialize)]
pub struct FamilyMember {
#[serde(flatten)]
membership: Membership,
user_name: String,
user_mail: String,
}
/// Get information about the users of a family
pub async fn get_memberships_of_family(family_id: FamilyID) -> anyhow::Result<Vec<FamilyMember>> {
let memberships = db_connection::execute(|conn| {
memberships::table
.filter(memberships::dsl::family_id.eq(family_id.0))
.get_results::<Membership>(conn)
})?;
let mut out = Vec::with_capacity(memberships.len());
for m in memberships {
let user = users_service::get_by_id(m.user_id()).await?;
out.push(FamilyMember {
user_name: user.name,
user_mail: user.email,
membership: m,
})
}
Ok(out)
}
/// Get information about a membership of a user, joined with family information
pub async fn get_family_membership(
family_id: FamilyID,