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 { 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() } }