show owner of boat in boat km list #344

Merged
philipp merged 1 commits from staging into main 2024-04-06 18:57:59 +02:00
2 changed files with 19 additions and 2 deletions

View File

@ -343,6 +343,14 @@ ORDER BY amount_seats DESC
Ok(()) Ok(())
} }
pub async fn owner(&self, db: &SqlitePool) -> Option<User> {
if let Some(owner_id) = self.owner {
Some(User::find_by_id(db, owner_id as i32).await.unwrap())
} else {
None
}
}
pub async fn delete(&self, db: &SqlitePool) { pub async fn delete(&self, db: &SqlitePool) {
sqlx::query!("DELETE FROM boat WHERE id=?", self.id) sqlx::query!("DELETE FROM boat WHERE id=?", self.id)
.execute(db) .execute(db)

View File

@ -5,6 +5,8 @@ use chrono::Datelike;
use serde::Serialize; use serde::Serialize;
use sqlx::{FromRow, Row, SqlitePool}; use sqlx::{FromRow, Row, SqlitePool};
use super::boat::Boat;
#[derive(Serialize, Clone)] #[derive(Serialize, Clone)]
pub struct BoatStat { pub struct BoatStat {
pot_years: Vec<i32>, pot_years: Vec<i32>,
@ -26,7 +28,7 @@ impl BoatStat {
let rows = sqlx::query( let rows = sqlx::query(
" "
SELECT SELECT
boat.name, boat.id,
location.name AS location, location.name AS location,
CAST(strftime('%Y', arrival) AS INTEGER) AS year, CAST(strftime('%Y', arrival) AS INTEGER) AS year,
CAST(SUM(distance_in_km) AS INTEGER) AS rowed_km CAST(SUM(distance_in_km) AS INTEGER) AS rowed_km
@ -49,7 +51,14 @@ impl BoatStat {
.unwrap(); .unwrap();
for row in rows { for row in rows {
let name: String = row.get("name"); let id: i32 = row.get("id");
let boat = Boat::find_by_id(db, id).await.unwrap();
let owner = if let Some(owner) = boat.owner(db).await {
owner.name
} else {
String::from("Verein")
};
let name = format!("{} ({})", boat.name, owner);
let location: String = row.get("location"); let location: String = row.get("location");
let year: i32 = row.get("year"); let year: i32 = row.get("year");
if year == 0 { if year == 0 {