From d88a35bb824dd930871fb4ce27305461a1560183 Mon Sep 17 00:00:00 2001 From: Philipp Hofer Date: Fri, 9 May 2025 08:30:09 +0200 Subject: [PATCH] show all activities for admin; Fixes #984 --- src/model/activity.rs | 28 +++++++++++++++++++++++++++- src/tera/admin/mod.rs | 21 ++++++++++++++++----- 2 files changed, 43 insertions(+), 6 deletions(-) diff --git a/src/model/activity.rs b/src/model/activity.rs index c75b813..3c25212 100644 --- a/src/model/activity.rs +++ b/src/model/activity.rs @@ -1,7 +1,7 @@ use std::ops::DerefMut; use super::{role::Role, user::User}; -use chrono::NaiveDateTime; +use chrono::{DateTime, Local, NaiveDateTime, TimeZone, Utc}; use serde::{Deserialize, Serialize}; use sqlx::{FromRow, Sqlite, SqlitePool, Transaction}; @@ -110,4 +110,30 @@ ORDER BY created_at DESC; .await .unwrap() } + + async fn last(db: &SqlitePool) -> Vec { + sqlx::query_as!( + Self, + " +SELECT id, created_at, text, relevant_for, keep_until FROM activity +ORDER BY id DESC +LIMIT 1000 + " + ) + .fetch_all(db) + .await + .unwrap() + } + + pub async fn show(db: &SqlitePool) -> String { + let mut ret = String::new(); + + for log in Self::last(db).await { + let utc_time: DateTime = Utc::from_utc_datetime(&Utc, &log.created_at); + let local_time = utc_time.with_timezone(&Local); + ret.push_str(&format!("- {local_time}: {}\n", log.text)); + } + + ret + } } diff --git a/src/tera/admin/mod.rs b/src/tera/admin/mod.rs index 53653ff..7b70bbf 100644 --- a/src/tera/admin/mod.rs +++ b/src/tera/admin/mod.rs @@ -1,10 +1,10 @@ use csv::ReaderBuilder; -use rocket::{FromForm, Route, State, form::Form, get, post, routes}; -use rocket_dyn_templates::{Template, context}; +use rocket::{form::Form, get, post, routes, FromForm, Route, State}; +use rocket_dyn_templates::{context, Template}; use sqlx::SqlitePool; use crate::{ - model::{log::Log, role::Role, user::AdminUser}, + model::{activity::Activity, log::Log, role::Role, user::AdminUser}, tera::Config, }; @@ -25,11 +25,16 @@ async fn rss(db: &State, key: &str, config: &State) -> Strin } } -#[get("/rss", rank = 2)] +#[get("/rss/old", rank = 2)] async fn show_rss(db: &State, _admin: AdminUser) -> String { Log::show(db).await } +#[get("/rss", rank = 2)] +async fn show_activities(db: &State, _admin: AdminUser) -> String { + Activity::show(db).await +} + #[get("/list")] async fn show_list(_admin: AdminUser) -> Template { Template::render("admin/list/index", context!()) @@ -83,6 +88,12 @@ pub fn routes() -> Vec { ret.append(&mut mail::routes()); ret.append(&mut event::routes()); ret.append(&mut role::routes()); - ret.append(&mut routes![rss, show_rss, show_list, list]); + ret.append(&mut routes![ + rss, + show_rss, + show_activities, + show_list, + list + ]); ret }