diff --git a/src/model/activity.rs b/src/model/activity.rs index 3c25212..2f49e4d 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::{DateTime, Local, NaiveDateTime, TimeZone, Utc}; +use chrono::{DateTime, Duration, Local, NaiveDateTime, TimeZone, Utc}; use serde::{Deserialize, Serialize}; use sqlx::{FromRow, Sqlite, SqlitePool, Transaction}; @@ -46,6 +46,15 @@ impl ActivityBuilder { } } + #[must_use] + pub fn keep_until_days(self, days: i64) -> Self { + let now = Utc::now().naive_utc(); + Self { + keep_until: Some(now + Duration::days(days)), + ..self + } + } + pub async fn save(self, db: &SqlitePool) { Activity::create(db, &self.text, &self.relevant_for, self.keep_until).await; } diff --git a/src/model/log.rs b/src/model/log.rs index 6b137b8..6b1304a 100644 --- a/src/model/log.rs +++ b/src/model/log.rs @@ -1,74 +1,16 @@ -use std::ops::DerefMut; +use super::activity::ActivityBuilder; +use sqlx::{Sqlite, SqlitePool, Transaction}; -use chrono::{DateTime, Local, NaiveDateTime, TimeZone, Utc}; -use serde::{Deserialize, Serialize}; -use sqlx::{FromRow, Sqlite, SqlitePool, Transaction}; - -#[derive(FromRow, Debug, Serialize, Deserialize)] -pub struct Log { - pub msg: String, - pub created_at: NaiveDateTime, -} +pub struct Log {} +// TODO: remove and convert to proper acitvities impl Log { pub async fn create(db: &SqlitePool, msg: String) -> bool { - sqlx::query!("INSERT INTO log(msg) VALUES (?)", msg,) - .execute(db) - .await - .is_ok() + ActivityBuilder::new(&msg).save(db).await; + true } pub async fn create_with_tx(db: &mut Transaction<'_, Sqlite>, msg: String) -> bool { - sqlx::query!("INSERT INTO log(msg) VALUES (?)", msg,) - .execute(db.deref_mut()) - .await - .is_ok() - } - - async fn last(db: &SqlitePool) -> Vec { - sqlx::query_as!( - Log, - " -SELECT msg, created_at -FROM log -ORDER BY id DESC -LIMIT 1000 - " - ) - .fetch_all(db) - .await - .unwrap() - } - - pub async fn generate_feed(db: &SqlitePool) -> String { - let mut ret = String::from( - r#" - - -Ruder App Admin Feed -app.rudernlinz.at -An RSS feed with activities from app.rudernlinz.at"#, - ); - 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(""); - ret.push_str(&format!("({}) {}", local_time, log.msg)); - ret.push_str(""); - } - ret.push_str(""); - ret.push_str(""); - ret.replace('\n', "") - } - - 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!("- {} - {}\n", local_time, log.msg)); - } - - ret + ActivityBuilder::new(&msg).save_tx(db).await; + true } } diff --git a/src/tera/admin/mod.rs b/src/tera/admin/mod.rs index 7b70bbf..6d9be71 100644 --- a/src/tera/admin/mod.rs +++ b/src/tera/admin/mod.rs @@ -3,10 +3,7 @@ use rocket::{form::Form, get, post, routes, FromForm, Route, State}; use rocket_dyn_templates::{context, Template}; use sqlx::SqlitePool; -use crate::{ - model::{activity::Activity, log::Log, role::Role, user::AdminUser}, - tera::Config, -}; +use crate::model::{activity::Activity, role::Role, user::AdminUser}; pub mod boat; pub mod event; @@ -16,20 +13,6 @@ pub mod role; pub mod schnupper; pub mod user; -#[get("/rss?")] -async fn rss(db: &State, key: &str, config: &State) -> String { - if key.eq(&config.rss_key) { - Log::generate_feed(db).await - } else { - "Not allowed".into() - } -} - -#[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 @@ -88,12 +71,6 @@ 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_activities, - show_list, - list - ]); + ret.append(&mut routes![show_activities, show_list, list]); ret }