diff --git a/src/model/user.rs b/src/model/user.rs index ca2cac3..e1dbd15 100644 --- a/src/model/user.rs +++ b/src/model/user.rs @@ -959,6 +959,30 @@ impl Deref for PlannedEventUser { &self.0 } } +#[derive(FromRow, Serialize, Deserialize, Clone, Debug)] +pub struct UserWithRolesAndMembershipPdf { + #[serde(flatten)] + pub user: User, + pub membership_pdf: bool, + pub roles: Vec, +} + +impl UserWithRolesAndMembershipPdf { + pub(crate) async fn from_user(db: &SqlitePool, user: User) -> Self { + let membership_pdf: bool = + sqlx::query_scalar!("SELECT membership_pdf FROM user WHERE id = $1", user.id) + .fetch_optional(db) + .await + .unwrap() + .is_some(); + + Self { + roles: user.roles(db).await, + user, + membership_pdf, + } + } +} #[derive(FromRow, Serialize, Deserialize, Clone, Debug)] pub struct UserWithMembershipPdf { diff --git a/src/tera/admin/user.rs b/src/tera/admin/user.rs index 332c74a..ed6ff61 100644 --- a/src/tera/admin/user.rs +++ b/src/tera/admin/user.rs @@ -5,7 +5,10 @@ use crate::model::{ log::Log, logbook::Logbook, role::Role, - user::{AdminUser, User, UserWithMembershipPdf, UserWithRoles, VorstandUser}, + user::{ + AdminUser, User, UserWithMembershipPdf, UserWithRoles, UserWithRolesAndMembershipPdf, + VorstandUser, + }, }; use futures::future::join_all; use rocket::{ @@ -45,13 +48,13 @@ async fn index( let user_futures: Vec<_> = User::all(db) .await .into_iter() - .map(|u| async move { UserWithRoles::from_user(u, db).await }) + .map(|u| async move { UserWithRolesAndMembershipPdf::from_user(db, u).await }) .collect(); let user: User = user.into(); let allowed_to_edit = user.has_role(db, "admin").await; - let users: Vec = join_all(user_futures).await; + let users: Vec = join_all(user_futures).await; let roles = Role::all(db).await; let families = Family::all_with_members(db).await; @@ -78,14 +81,13 @@ async fn index_admin( let user_futures: Vec<_> = User::all(db) .await .into_iter() - .map(|u| async move { UserWithRoles::from_user(u, db).await }) + .map(|u| async move { UserWithRolesAndMembershipPdf::from_user(db, u).await }) .collect(); + let users: Vec = join_all(user_futures).await; let user: User = user.user; let allowed_to_edit = user.has_role(db, "admin").await; - let users: Vec = join_all(user_futures).await; - let roles = Role::all(db).await; let families = Family::all_with_members(db).await; diff --git a/src/tera/log.rs b/src/tera/log.rs index 1fe6b15..011aff7 100644 --- a/src/tera/log.rs +++ b/src/tera/log.rs @@ -1,6 +1,5 @@ use std::net::IpAddr; -use futures::{stream, StreamExt}; use rocket::{ form::Form, get,