add boat stats Fixes #50

This commit is contained in:
2023-10-31 16:07:15 +01:00
parent 5a596132ab
commit 730f9e5dff
5 changed files with 93 additions and 7 deletions

View File

@ -9,7 +9,28 @@ pub struct Stat {
}
impl Stat {
pub async fn get_rowed_km(db: &SqlitePool) -> Vec<Stat> {
pub async fn boats(db: &SqlitePool) -> Vec<Stat> {
//TODO: switch to query! macro again (once upgraded to sqlite 3.42 on server)
sqlx::query(
"
SELECT (SELECT name FROM boat WHERE id=logbook.boat_id) as name, CAST(SUM(distance_in_km) AS INTEGER) AS rowed_km
FROM logbook
GROUP BY boat_id
ORDER BY rowed_km DESC;
",
)
.fetch_all(db)
.await
.unwrap()
.into_iter()
.map(|row| Stat {
name: row.get("name"),
rowed_km: row.get("rowed_km"),
})
.collect()
}
pub async fn people(db: &SqlitePool) -> Vec<Stat> {
//TODO: switch to query! macro again (once upgraded to sqlite 3.42 on server)
sqlx::query(
"

View File

@ -9,28 +9,50 @@ use crate::model::{
use super::log::KioskCookie;
#[get("/boats", rank = 2)]
async fn index_boat(db: &State<SqlitePool>, user: NonGuestUser) -> Template {
let stat = Stat::boats(db).await;
let kiosk = false;
Template::render(
"stat.boats",
context!(loggedin_user: &user.user, stat, kiosk),
)
}
#[get("/boats")]
async fn index_boat_kiosk(db: &State<SqlitePool>, _kiosk: KioskCookie) -> Template {
let stat = Stat::boats(db).await;
let kiosk = true;
Template::render("stat.boats", context!(stat, kiosk, show_kiosk_header: true))
}
#[get("/", rank = 2)]
async fn index(db: &State<SqlitePool>, user: NonGuestUser) -> Template {
let stat = Stat::get_rowed_km(db).await;
let stat = Stat::people(db).await;
let personal = stat::get_personal(db, &user.user).await;
let kiosk = false;
Template::render(
"stat",
"stat.people",
context!(loggedin_user: &user.user, stat, personal, kiosk),
)
}
#[get("/")]
async fn index_kiosk(db: &State<SqlitePool>, _kiosk: KioskCookie) -> Template {
let stat = Stat::get_rowed_km(db).await;
let stat = Stat::people(db).await;
let kiosk = true;
Template::render("stat", context!(stat, kiosk, show_kiosk_header: true))
Template::render(
"stat.people",
context!(stat, kiosk, show_kiosk_header: true),
)
}
pub fn routes() -> Vec<Route> {
routes![index, index_kiosk]
routes![index, index_kiosk, index_boat, index_boat_kiosk]
}
#[cfg(test)]