show waterlevel for the next days
This commit is contained in:
@ -5,6 +5,7 @@ use sqlx::SqlitePool;
|
||||
use self::{
|
||||
planned_event::{PlannedEvent, PlannedEventWithUserAndTriptype},
|
||||
trip::{Trip, TripWithUserAndType},
|
||||
waterlevel::Waterlevel,
|
||||
};
|
||||
|
||||
pub mod boat;
|
||||
@ -27,6 +28,7 @@ pub mod tripdetails;
|
||||
pub mod triptype;
|
||||
pub mod user;
|
||||
pub mod usertrip;
|
||||
pub mod waterlevel;
|
||||
|
||||
#[derive(Serialize, Debug)]
|
||||
pub struct Day {
|
||||
@ -34,6 +36,7 @@ pub struct Day {
|
||||
planned_events: Vec<PlannedEventWithUserAndTriptype>,
|
||||
trips: Vec<TripWithUserAndType>,
|
||||
is_pinned: bool,
|
||||
max_waterlevel: Option<i64>,
|
||||
}
|
||||
|
||||
impl Day {
|
||||
@ -44,6 +47,7 @@ impl Day {
|
||||
planned_events: PlannedEvent::get_pinned_for_day(db, day).await,
|
||||
trips: Trip::get_pinned_for_day(db, day).await,
|
||||
is_pinned,
|
||||
max_waterlevel: Waterlevel::max_waterlevel_for_day(db, day).await,
|
||||
}
|
||||
} else {
|
||||
Self {
|
||||
@ -51,6 +55,7 @@ impl Day {
|
||||
planned_events: PlannedEvent::get_for_day(db, day).await,
|
||||
trips: Trip::get_for_day(db, day).await,
|
||||
is_pinned,
|
||||
max_waterlevel: Waterlevel::max_waterlevel_for_day(db, day).await,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
72
src/model/waterlevel.rs
Normal file
72
src/model/waterlevel.rs
Normal file
@ -0,0 +1,72 @@
|
||||
use std::ops::DerefMut;
|
||||
|
||||
use chrono::NaiveDate;
|
||||
use rocket::serde::{Deserialize, Serialize};
|
||||
use sqlx::{FromRow, Sqlite, SqlitePool, Transaction};
|
||||
|
||||
#[derive(FromRow, Debug, Serialize, Deserialize, Eq, Hash, PartialEq, Clone)]
|
||||
pub struct Waterlevel {
|
||||
pub id: i64,
|
||||
pub day: NaiveDate,
|
||||
pub time: String,
|
||||
pub max: i64,
|
||||
pub min: i64,
|
||||
pub mittel: i64,
|
||||
pub tumax: i64,
|
||||
pub tumin: i64,
|
||||
pub tumittel: i64,
|
||||
}
|
||||
|
||||
impl Waterlevel {
|
||||
pub async fn find_by_id(db: &SqlitePool, id: i32) -> Option<Self> {
|
||||
sqlx::query_as!(Self, "SELECT * FROM waterlevel WHERE id like ?", id)
|
||||
.fetch_one(db)
|
||||
.await
|
||||
.ok()
|
||||
}
|
||||
pub async fn find_by_id_tx(db: &mut Transaction<'_, Sqlite>, id: i32) -> Option<Self> {
|
||||
sqlx::query_as!(Self, "SELECT * FROM waterlevel WHERE id like ?", id)
|
||||
.fetch_one(db.deref_mut())
|
||||
.await
|
||||
.ok()
|
||||
}
|
||||
|
||||
pub async fn create(
|
||||
db: &mut Transaction<'_, Sqlite>,
|
||||
day: NaiveDate,
|
||||
time: String,
|
||||
max: i64,
|
||||
min: i64,
|
||||
mittel: i64,
|
||||
tumax: i64,
|
||||
tumin: i64,
|
||||
tumittel: i64,
|
||||
) -> Result<(), String> {
|
||||
sqlx::query!(
|
||||
"INSERT INTO waterlevel(day, time, max, min, mittel, tumax, tumin, tumittel) VALUES (?,?,?,?,?,?,?,?)",
|
||||
day, time, max, min, mittel, tumax, tumin, tumittel
|
||||
)
|
||||
.execute(db.deref_mut())
|
||||
.await
|
||||
.map_err(|e| e.to_string())?;
|
||||
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 = ?",
|
||||
day
|
||||
)
|
||||
.fetch_one(db)
|
||||
.await
|
||||
.unwrap()
|
||||
.max
|
||||
}
|
||||
|
||||
pub async fn delete_all(db: &mut Transaction<'_, Sqlite>) {
|
||||
sqlx::query!("DELETE FROM waterlevel;")
|
||||
.execute(db.deref_mut())
|
||||
.await
|
||||
.unwrap();
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user