use crate::model::{ personal::Achievements, role::Role, user::{User, UserWithDetails, VorstandUser}, }; use rocket::{Route, State, get, request::FlashMessage, routes}; use rocket_dyn_templates::{Template, tera::Context}; use sqlx::SqlitePool; #[get("/achievement")] async fn index( db: &State, admin: VorstandUser, flash: Option>, ) -> Template { let mut context = Context::new(); if let Some(msg) = flash { context.insert("flash", &msg.into_inner()); } let role = Role::find_by_name(db, "Donau Linz").await.unwrap(); let users = User::all_with_role(db, &role).await; let mut people = Vec::new(); let mut rowingbadge_year = None; for user in users { let achievement = Achievements::for_user(db, &user).await; if let Some(badge) = &achievement.rowingbadge { rowingbadge_year = Some(badge.year); } people.push((user, achievement)); } context.insert("people", &people); context.insert("rowingbadge_year", &rowingbadge_year.unwrap()); context.insert( "loggedin_user", &UserWithDetails::from_user(admin.into_inner(), db).await, ); Template::render("achievement", context.into_json()) } pub fn routes() -> Vec { routes![index] }