diff --git a/src/model/activity.rs b/src/model/activity.rs index c19d744..33e0939 100644 --- a/src/model/activity.rs +++ b/src/model/activity.rs @@ -1,5 +1,6 @@ use std::ops::DerefMut; +use super::user::User; use chrono::NaiveDateTime; use serde::{Deserialize, Serialize}; use sqlx::{FromRow, Sqlite, SqlitePool, Transaction}; @@ -51,4 +52,21 @@ impl Activity { Self::create_with_tx(&mut tx, text, relevant_for, keep_until).await; tx.commit().await.unwrap(); } + + pub async fn for_user(db: &SqlitePool, user: &User) -> Vec { + let user_str = format!("user-{};", user.id); + sqlx::query_as!( + Self, + " +SELECT id, created_at, text, relevant_for, keep_until FROM activity +WHERE + relevant_for like CONCAT('%', ?, '%') +ORDER BY created_at DESC; + ", + user_str + ) + .fetch_all(db) + .await + .unwrap() + } } diff --git a/src/model/user/basic.rs b/src/model/user/basic.rs index d61ac96..66d0aba 100644 --- a/src/model/user/basic.rs +++ b/src/model/user/basic.rs @@ -11,11 +11,18 @@ impl User { &self, db: &SqlitePool, updated_by: &ManageUserUser, + user: &User, note: &str, ) -> Result<(), String> { let note = note.trim(); - Activity::create(db, note, "relevant_for", None).await; + Activity::create( + db, + &format!("({updated_by}) {note}"), + &format!("user-{};", user.id), + None, + ) + .await; Ok(()) } diff --git a/src/tera/admin/user.rs b/src/tera/admin/user.rs index 42056cd..8fa6aad 100644 --- a/src/tera/admin/user.rs +++ b/src/tera/admin/user.rs @@ -1,5 +1,6 @@ use crate::{ model::{ + activity::Activity, family::Family, log::Log, logbook::Logbook, @@ -128,6 +129,7 @@ async fn view( let member = Member::from(db, user.clone()).await; let fee = user.fee(db).await; + let activities = Activity::for_user(db, &user).await; let user = UserWithRolesAndMembershipPdf::from_user(db, user).await; @@ -147,6 +149,7 @@ async fn view( context.insert("supposed_to_pay", &member.supposed_to_pay()); context.insert("fee", &fee); context.insert("member", &member); + context.insert("activities", &activities); context.insert("roles", &roles); context.insert("families", &families); context.insert( @@ -332,7 +335,7 @@ pub struct AddNoteForm { note: String, } -#[post("/user//add-note", data = "")] +#[post("/user//new-note", data = "")] async fn add_note( db: &State, data: Form, @@ -346,7 +349,7 @@ async fn add_note( ); }; - match user.add_note(db, &admin, &data.note).await { + match user.add_note(db, &admin, &user, &data.note).await { Ok(_) => Flash::success( Redirect::to(format!("/admin/user/{}", user.id)), "Notiz hinzugefügt", diff --git a/templates/admin/user/view.html.tera b/templates/admin/user/view.html.tera index bd08efb..11772f9 100644 --- a/templates/admin/user/view.html.tera +++ b/templates/admin/user/view.html.tera @@ -390,8 +390,9 @@
    -
  • Passwort zurückgesetzt am/um X
  • -
  • Am X beigetreten.
  • + {% for activity in activities %} +
  • {{ activity.created_at | date(format="%d. %m. %Y") }}: {{ activity.text }}
  • + {% endfor %}