From da793fec2de0daf94d1ca9a7a869f68f01fc2677 Mon Sep 17 00:00:00 2001 From: Philipp Hofer Date: Tue, 11 Feb 2025 20:23:18 +0100 Subject: [PATCH] allow sorting of user --- src/model/user/mod.rs | 31 ++++++++++++++++++++----------- src/tera/admin/user.rs | 8 ++++++-- 2 files changed, 26 insertions(+), 13 deletions(-) diff --git a/src/model/user/mod.rs b/src/model/user/mod.rs index 815fbc7..839b491 100644 --- a/src/model/user/mod.rs +++ b/src/model/user/mod.rs @@ -591,18 +591,27 @@ WHERE lower(name)=? } pub async fn all(db: &SqlitePool) -> Vec { - sqlx::query_as!( - Self, - " -SELECT id, name, pw, deleted, last_access, dob, weight, sex, member_since_date, birthdate, mail, nickname, notes, phone, address, family_id, user_token -FROM user -WHERE deleted = 0 -ORDER BY last_access DESC + Self::all_with_order(db, "last_access", true).await + } + + pub async fn all_with_order(db: &SqlitePool, sort: &str, asc: bool) -> Vec { + let mut query = format!( " - ) - .fetch_all(db) - .await - .unwrap() + SELECT id, name, pw, deleted, last_access, dob, weight, sex, member_since_date, birthdate, mail, nickname, notes, phone, address, family_id, user_token + FROM user + WHERE deleted = 0 + ORDER BY {} + ", + sort + ); + if !asc { + query.push_str(" DESC"); + } + + sqlx::query_as::<_, User>(&query) + .fetch_all(db) + .await + .unwrap() } pub async fn all_with_role(db: &SqlitePool, role: &Role) -> Vec { diff --git a/src/tera/admin/user.rs b/src/tera/admin/user.rs index 8cea3d8..192560b 100644 --- a/src/tera/admin/user.rs +++ b/src/tera/admin/user.rs @@ -43,13 +43,17 @@ impl<'r> FromRequest<'r> for Referer { } } -#[get("/user")] +#[get("/user?&")] async fn index( db: &State, user: VorstandUser, flash: Option>, + sort: Option, + asc: bool, ) -> Template { - let user_futures: Vec<_> = User::all(db) + let sort_column = sort.unwrap_or_else(|| "last_access".to_string()); + + let user_futures: Vec<_> = User::all_with_order(db, &sort_column, asc) .await .into_iter() .map(|u| async move { UserWithRolesAndMembershipPdf::from_user(db, u).await })