use proper hydro license; add fluctuation
This commit is contained in:
@ -1,6 +1,7 @@
|
||||
use chrono::NaiveDate;
|
||||
use serde::Serialize;
|
||||
use sqlx::SqlitePool;
|
||||
use waterlevel::WaterlevelDay;
|
||||
|
||||
use self::{
|
||||
event::{Event, EventWithUserAndTriptype},
|
||||
@ -38,7 +39,7 @@ pub struct Day {
|
||||
events: Vec<EventWithUserAndTriptype>,
|
||||
trips: Vec<TripWithUserAndType>,
|
||||
is_pinned: bool,
|
||||
max_waterlevel: Option<i64>,
|
||||
max_waterlevel: Option<WaterlevelDay>,
|
||||
weather: Option<Weather>,
|
||||
}
|
||||
|
||||
|
@ -17,6 +17,13 @@ pub struct Waterlevel {
|
||||
pub tumittel: i64,
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize)]
|
||||
pub struct WaterlevelDay {
|
||||
pub day: NaiveDate,
|
||||
pub avg: i64,
|
||||
pub fluctuation: i64,
|
||||
}
|
||||
|
||||
pub struct Create {
|
||||
pub day: NaiveDate,
|
||||
pub time: String,
|
||||
@ -53,15 +60,28 @@ impl Waterlevel {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub async fn max_waterlevel_for_day(db: &SqlitePool, day: NaiveDate) -> Option<i64> {
|
||||
sqlx::query!(
|
||||
"SELECT MAX(mittel) as max FROM waterlevel WHERE day = ?",
|
||||
pub async fn max_waterlevel_for_day(db: &SqlitePool, day: NaiveDate) -> Option<WaterlevelDay> {
|
||||
let waterlevel = sqlx::query_as!(
|
||||
Waterlevel,
|
||||
"SELECT id, day, time, max, min, mittel, tumax, tumin, tumittel FROM waterlevel WHERE day = ? ORDER BY mittel DESC LIMIT 1",
|
||||
day
|
||||
)
|
||||
.fetch_one(db)
|
||||
.await
|
||||
.unwrap()
|
||||
.max
|
||||
.fetch_optional(db)
|
||||
.await.unwrap();
|
||||
|
||||
if let Some(waterlevel) = waterlevel {
|
||||
let max_diff = (waterlevel.mittel - waterlevel.max).abs();
|
||||
let min_diff = (waterlevel.mittel - waterlevel.min).abs();
|
||||
let fluctuation = max_diff.max(min_diff);
|
||||
|
||||
return Some(WaterlevelDay {
|
||||
day: waterlevel.day,
|
||||
avg: waterlevel.mittel,
|
||||
fluctuation,
|
||||
});
|
||||
}
|
||||
|
||||
None
|
||||
}
|
||||
|
||||
pub async fn delete_all(db: &mut Transaction<'_, Sqlite>) {
|
||||
|
Reference in New Issue
Block a user