34 lines
756 B
Rust
34 lines
756 B
Rust
use serde::Serialize;
|
|
use sqlx::{FromRow, SqlitePool};
|
|
|
|
#[derive(FromRow, Serialize, Clone, Debug)]
|
|
pub struct Distance {
|
|
pub id: i64,
|
|
pub destination: String,
|
|
pub distance_in_km: i64,
|
|
}
|
|
|
|
impl Distance {
|
|
/// Return all default `distance`s, ordered by usage in logbook entries
|
|
pub async fn all(db: &SqlitePool) -> Vec<Self> {
|
|
sqlx::query_as!(
|
|
Self,
|
|
"SELECT
|
|
d.id,
|
|
d.destination,
|
|
d.distance_in_km
|
|
FROM
|
|
distance d
|
|
LEFT JOIN
|
|
logbook l ON d.destination = l.destination AND d.distance_in_km = l.distance_in_km
|
|
GROUP BY
|
|
d.id, d.destination, d.distance_in_km
|
|
ORDER BY
|
|
COUNT(l.id) DESC, d.destination ASC;"
|
|
)
|
|
.fetch_all(db)
|
|
.await
|
|
.unwrap()
|
|
}
|
|
}
|