add stats
This commit is contained in:
35
src/model/stat.rs
Normal file
35
src/model/stat.rs
Normal file
@ -0,0 +1,35 @@
|
||||
use serde::Serialize;
|
||||
use sqlx::{FromRow, SqlitePool};
|
||||
|
||||
#[derive(FromRow, Serialize, Clone)]
|
||||
pub struct Stat {
|
||||
name: String,
|
||||
rowed_km: i32,
|
||||
}
|
||||
|
||||
impl Stat {
|
||||
pub async fn get_rowed_km(db: &SqlitePool) -> Vec<Stat> {
|
||||
sqlx::query!(
|
||||
"SELECT u.name AS name, COALESCE(SUM(distance_in_km), 0) as rowed_km
|
||||
FROM user u
|
||||
INNER JOIN (
|
||||
SELECT shipmaster AS user_id, distance_in_km
|
||||
FROM logbook
|
||||
UNION
|
||||
SELECT r.rower_id AS user_id, l.distance_in_km
|
||||
FROM logbook l
|
||||
INNER JOIN rower r ON r.logbook_id = l.id
|
||||
) AS subquery ON u.id = subquery.user_id
|
||||
GROUP BY u.id ORDER BY rowed_km DESC;"
|
||||
)
|
||||
.fetch_all(db)
|
||||
.await
|
||||
.unwrap()
|
||||
.into_iter()
|
||||
.map(|row| Stat {
|
||||
name: row.name,
|
||||
rowed_km: row.rowed_km.unwrap_or(0),
|
||||
})
|
||||
.collect()
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user