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 { // 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 { 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 // ); // } //}