diff --git a/README.md b/README.md index 14894aa..dd6bb26 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ - [] after an hour(?) of inactivity -> show large popup w/ "maybe old data (ignore) (reload page)" (ignore bc maybe use is actively doing something -> don't throw input away!) ## Backend -- [] add `always_show` to `planned_trips` (e.g. for wanderfahrten) +- [] Don't show events if time > 1h(?) ago # Nice to have ## Frontend diff --git a/src/model/user.rs b/src/model/user.rs index 86355f5..2fd2f8e 100644 --- a/src/model/user.rs +++ b/src/model/user.rs @@ -1,6 +1,7 @@ use std::ops::Deref; use argon2::{password_hash::SaltString, Argon2, PasswordHasher}; +use chrono::{Datelike, Local, NaiveDate}; use rocket::{ async_trait, http::{Cookie, Status}, @@ -12,6 +13,8 @@ use serde::{Deserialize, Serialize}; use serde_json::json; use sqlx::{FromRow, SqlitePool}; +use super::{planned_event::PlannedEvent, Day}; + #[derive(FromRow, Debug, Serialize, Deserialize)] pub struct User { pub id: i64, @@ -168,6 +171,46 @@ ORDER BY last_access DESC .await .unwrap(); //Okay, because we can only create a User of a valid id } + + pub async fn get_days(&self, db: &SqlitePool) -> Vec { + let mut days = Vec::new(); + for i in 0..self.amount_days_to_show() { + let date = (Local::now() + chrono::Duration::days(i)).date_naive(); + + if self.is_guest { + days.push(Day::new_guest(db, date, false).await); + } else { + days.push(Day::new(db, date, false).await); + } + } + + for date in PlannedEvent::pinned_days(db, self.amount_days_to_show()).await { + if self.is_guest { + let day = Day::new_guest(db, date, true).await; + if !day.planned_events.is_empty() { + days.push(day); + } + } else { + days.push(Day::new(db, date, true).await); + } + } + days + } + + fn amount_days_to_show(&self) -> i64 { + if self.is_cox { + let end_of_year = NaiveDate::from_ymd_opt(Local::now().year(), 12, 31).unwrap(); //Ok, + //december + //has 31 + //days + end_of_year + .signed_duration_since(Local::now().date_naive()) + .num_days() + + 1 + } else { + 6 + } + } } #[async_trait] diff --git a/src/rest/mod.rs b/src/rest/mod.rs index d61b780..4df1f31 100644 --- a/src/rest/mod.rs +++ b/src/rest/mod.rs @@ -1,4 +1,3 @@ -use chrono::{Datelike, Duration, Local, NaiveDate}; use rocket::{ catch, catchers, fairing::AdHoc, @@ -14,12 +13,10 @@ use sqlx::SqlitePool; use crate::model::{ log::Log, - planned_event::PlannedEvent, tripdetails::TripDetails, triptype::TripType, user::User, usertrip::{UserTrip, UserTripError}, - Day, }; mod admin; @@ -27,25 +24,8 @@ mod auth; mod cox; mod misc; -fn amount_days_to_show(is_cox: bool) -> i64 { - if is_cox { - let end_of_year = NaiveDate::from_ymd_opt(Local::now().year(), 12, 31).unwrap(); //Ok, - //december - //has 31 - //days - end_of_year - .signed_duration_since(Local::now().date_naive()) - .num_days() - + 1 - } else { - 6 - } -} - #[get("/")] async fn index(db: &State, user: User, flash: Option>) -> Template { - let mut days = Vec::new(); - let mut context = Context::new(); if user.is_cox || user.is_admin { @@ -53,25 +33,7 @@ async fn index(db: &State, user: User, flash: Option