135 lines
3.3 KiB
Rust
135 lines
3.3 KiB
Rust
|
use serde::{Deserialize, Serialize};
|
||
|
use sqlx::{FromRow, SqlitePool};
|
||
|
|
||
|
use super::{logbook::Logbook, user::User};
|
||
|
|
||
|
#[derive(FromRow, Debug, Serialize, Deserialize)]
|
||
|
pub struct Rower {
|
||
|
pub logbook_id: i64,
|
||
|
pub rower_id: i64,
|
||
|
}
|
||
|
|
||
|
impl Rower {
|
||
|
//pub async fn find_by_id(db: &SqlitePool, id: i32) -> Option<Self> {
|
||
|
// sqlx::query_as!(
|
||
|
// Self,
|
||
|
// "
|
||
|
//SELECT id,boat_id,shipmaster,shipmaster_only_steering,departure,arrival,destination,distance_in_km,comments,logtype
|
||
|
//FROM logbook
|
||
|
//WHERE id like ?
|
||
|
// ",
|
||
|
// id
|
||
|
// )
|
||
|
// .fetch_one(db)
|
||
|
// .await
|
||
|
// .ok()
|
||
|
//}
|
||
|
|
||
|
pub async fn for_log(db: &SqlitePool, log: &Logbook) -> Vec<User> {
|
||
|
sqlx::query_as!(
|
||
|
User,
|
||
|
"
|
||
|
SELECT id, name, pw, is_cox, is_admin, is_guest, deleted, last_access
|
||
|
FROM user
|
||
|
WHERE id in (SELECT rower_id FROM rower WHERE logbook_id=?)
|
||
|
",
|
||
|
log.id
|
||
|
)
|
||
|
.fetch_all(db)
|
||
|
.await
|
||
|
.unwrap()
|
||
|
}
|
||
|
|
||
|
pub async fn create(db: &SqlitePool, logbook_id: i64, rower_id: i64) {
|
||
|
//Check if boat is not locked
|
||
|
//Check if boat is already on water
|
||
|
let _ = sqlx::query!(
|
||
|
"INSERT INTO rower(logbook_id, rower_id) VALUES (?,?)",
|
||
|
logbook_id,
|
||
|
rower_id
|
||
|
)
|
||
|
.execute(db)
|
||
|
.await
|
||
|
.unwrap();
|
||
|
}
|
||
|
|
||
|
// pub async fn delete(&self, db: &SqlitePool) {
|
||
|
// sqlx::query!("DELETE FROM boat WHERE id=?", self.id)
|
||
|
// .execute(db)
|
||
|
// .await
|
||
|
// .unwrap(); //Okay, because we can only create a User of a valid id
|
||
|
// }
|
||
|
}
|
||
|
//
|
||
|
//#[cfg(test)]
|
||
|
//mod test {
|
||
|
// use crate::{model::boat::Boat, testdb};
|
||
|
//
|
||
|
// use sqlx::SqlitePool;
|
||
|
//
|
||
|
// #[sqlx::test]
|
||
|
// fn test_find_correct_id() {
|
||
|
// let pool = testdb!();
|
||
|
// let boat = Boat::find_by_id(&pool, 1).await.unwrap();
|
||
|
// assert_eq!(boat.id, 1);
|
||
|
// }
|
||
|
//
|
||
|
// #[sqlx::test]
|
||
|
// fn test_find_wrong_id() {
|
||
|
// let pool = testdb!();
|
||
|
// let boat = Boat::find_by_id(&pool, 1337).await;
|
||
|
// assert!(boat.is_none());
|
||
|
// }
|
||
|
//
|
||
|
// #[sqlx::test]
|
||
|
// fn test_all() {
|
||
|
// let pool = testdb!();
|
||
|
// let res = Boat::all(&pool).await;
|
||
|
// assert!(res.len() > 3);
|
||
|
// }
|
||
|
//
|
||
|
// #[sqlx::test]
|
||
|
// fn test_succ_create() {
|
||
|
// let pool = testdb!();
|
||
|
//
|
||
|
// assert_eq!(
|
||
|
// Boat::create(
|
||
|
// &pool,
|
||
|
// "new-boat-name".into(),
|
||
|
// 42,
|
||
|
// None,
|
||
|
// "Best Boatbuilder".into(),
|
||
|
// true,
|
||
|
// true,
|
||
|
// false,
|
||
|
// Some(1),
|
||
|
// None
|
||
|
// )
|
||
|
// .await,
|
||
|
// true
|
||
|
// );
|
||
|
// }
|
||
|
//
|
||
|
// #[sqlx::test]
|
||
|
// fn test_duplicate_name_create() {
|
||
|
// let pool = testdb!();
|
||
|
//
|
||
|
// assert_eq!(
|
||
|
// Boat::create(
|
||
|
// &pool,
|
||
|
// "Haichenbach".into(),
|
||
|
// 42,
|
||
|
// None,
|
||
|
// "Best Boatbuilder".into(),
|
||
|
// true,
|
||
|
// true,
|
||
|
// false,
|
||
|
// Some(1),
|
||
|
// None
|
||
|
// )
|
||
|
// .await,
|
||
|
// false
|
||
|
// );
|
||
|
// }
|
||
|
//}
|