92 lines
2.7 KiB
Rust
92 lines
2.7 KiB
Rust
use rocket::{get, routes, Route, State};
|
|
use rocket_dyn_templates::{context, Template};
|
|
use sqlx::SqlitePool;
|
|
|
|
use crate::model::{
|
|
stat::{self, BoatStat, Stat},
|
|
user::{DonauLinzUser, UserWithDetails},
|
|
};
|
|
|
|
use super::log::KioskCookie;
|
|
|
|
#[get("/boats", rank = 2)]
|
|
async fn index_boat(db: &State<SqlitePool>, user: DonauLinzUser) -> Template {
|
|
let stat = BoatStat::get(db).await;
|
|
let kiosk = false;
|
|
|
|
Template::render(
|
|
"stat.boats",
|
|
context!(loggedin_user: &UserWithDetails::from_user(user.into_inner(), db).await, stat, kiosk),
|
|
)
|
|
}
|
|
|
|
#[get("/boats")]
|
|
async fn index_boat_kiosk(db: &State<SqlitePool>, _kiosk: KioskCookie) -> Template {
|
|
let stat = BoatStat::get(db).await;
|
|
let kiosk = true;
|
|
|
|
Template::render("stat.boats", context!(stat, kiosk, show_kiosk_header: true))
|
|
}
|
|
|
|
#[get("/?<year>", rank = 2)]
|
|
async fn index(db: &State<SqlitePool>, user: DonauLinzUser, year: Option<i32>) -> Template {
|
|
let stat = Stat::people(db, year).await;
|
|
let club_km = Stat::sum_people(db, year).await;
|
|
let club_trips = Stat::trips_people(db, year).await;
|
|
let guest_km = Stat::guest(db, year).await;
|
|
let personal = stat::get_personal(db, &user).await;
|
|
let kiosk = false;
|
|
|
|
Template::render(
|
|
"stat.people",
|
|
context!(loggedin_user: &UserWithDetails::from_user(user.into_inner(), db).await, stat, personal, kiosk, guest_km, club_km, club_trips),
|
|
)
|
|
}
|
|
|
|
#[get("/?<year>")]
|
|
async fn index_kiosk(db: &State<SqlitePool>, _kiosk: KioskCookie, year: Option<i32>) -> Template {
|
|
let stat = Stat::people(db, year).await;
|
|
let club_km = Stat::sum_people(db, year).await;
|
|
let club_trips = Stat::trips_people(db, year).await;
|
|
let guest_km = Stat::guest(db, year).await;
|
|
let kiosk = true;
|
|
|
|
Template::render(
|
|
"stat.people",
|
|
context!(stat, kiosk, show_kiosk_header: true, guest_km, club_km, club_trips),
|
|
)
|
|
}
|
|
|
|
pub fn routes() -> Vec<Route> {
|
|
routes![index, index_kiosk, index_boat, index_boat_kiosk]
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod test {
|
|
use rocket::{http::Status, local::asynchronous::Client};
|
|
use sqlx::SqlitePool;
|
|
|
|
use crate::testdb;
|
|
|
|
#[sqlx::test]
|
|
fn test_kiosk_stat() {
|
|
let db = testdb!();
|
|
|
|
let rocket = rocket::build().manage(db.clone());
|
|
let rocket = crate::tera::config(rocket);
|
|
|
|
let client = Client::tracked(rocket).await.unwrap();
|
|
// "Log in"
|
|
let req = client.get("/log/kiosk/ekrv2019/Linz");
|
|
let _ = req.dispatch().await;
|
|
|
|
// `/stat` should be viewable
|
|
let req = client.get("/stat");
|
|
let response = req.dispatch().await;
|
|
|
|
assert_eq!(response.status(), Status::Ok);
|
|
let text = response.into_string().await.unwrap();
|
|
assert!(text.contains("Statistik"));
|
|
}
|
|
}
|