add routes for different years

This commit is contained in:
2023-11-18 12:21:37 +01:00
parent e053ff96cf
commit f001aaf90f
3 changed files with 41 additions and 26 deletions

View File

@ -1,4 +1,5 @@
use crate::model::user::User;
use chrono::Datelike;
use serde::Serialize;
use sqlx::{FromRow, Row, SqlitePool};
@ -9,15 +10,20 @@ pub struct Stat {
}
impl Stat {
pub async fn boats(db: &SqlitePool) -> Vec<Stat> {
pub async fn boats(db: &SqlitePool, year: Option<i32>) -> Vec<Stat> {
let year = match year {
Some(year) => year,
None => chrono::Utc::now().year(),
};
//TODO: switch to query! macro again (once upgraded to sqlite 3.42 on server)
sqlx::query(
sqlx::query(&format!(
"
SELECT (SELECT name FROM boat WHERE id=logbook.boat_id) as name, CAST(SUM(distance_in_km) AS INTEGER) AS rowed_km
FROM logbook
FROM logbook
WHERE arrival LIKE '{}-%'
GROUP BY boat_id
ORDER BY rowed_km DESC;
",
",year)
)
.fetch_all(db)
.await
@ -30,19 +36,24 @@ ORDER BY rowed_km DESC;
.collect()
}
pub async fn people(db: &SqlitePool) -> Vec<Stat> {
pub async fn people(db: &SqlitePool, year: Option<i32>) -> Vec<Stat> {
let year = match year {
Some(year) => year,
None => chrono::Utc::now().year(),
};
//TODO: switch to query! macro again (once upgraded to sqlite 3.42 on server)
sqlx::query(
sqlx::query(&format!(
"
SELECT u.name, CAST(SUM(l.distance_in_km) AS INTEGER) AS rowed_km
FROM user u
INNER JOIN rower r ON u.id = r.rower_id
INNER JOIN logbook l ON r.logbook_id = l.id
WHERE u.is_guest = 0 AND l.distance_in_km IS NOT NULL
WHERE u.is_guest = 0 AND l.distance_in_km IS NOT NULL AND l.arrival LIKE '{}-%'
GROUP BY u.name
ORDER BY rowed_km DESC;
",
)
year
))
.fetch_all(db)
.await
.unwrap()