forked from Ruderverein-Donau-Linz/rowt
47 lines
1.3 KiB
Rust
47 lines
1.3 KiB
Rust
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<SqlitePool>,
|
|
admin: VorstandUser,
|
|
flash: Option<FlashMessage<'_>>,
|
|
) -> 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<Route> {
|
|
routes![index]
|
|
}
|