diff --git a/src/model/event.rs b/src/model/event.rs index 5ef81e4..699f5e7 100644 --- a/src/model/event.rs +++ b/src/model/event.rs @@ -552,7 +552,7 @@ mod test { let trip_details = TripDetails::find_by_id(&pool, 1).await.unwrap(); - let admin = EventUser::new(&pool, User::find_by_id(&pool, 1).await.unwrap()) + let admin = EventUser::new(&pool, &User::find_by_id(&pool, 1).await.unwrap()) .await .unwrap(); Event::create(&pool, &admin, "new-event".into(), 2, false, &trip_details).await; diff --git a/src/model/notification.rs b/src/model/notification.rs index 1c74a1a..db51693 100644 --- a/src/model/notification.rs +++ b/src/model/notification.rs @@ -256,7 +256,7 @@ mod test { let trip_details = TripDetails::find_by_id(&pool, tripdetails_id) .await .unwrap(); - let user = EventUser::new(&pool, User::find_by_id(&pool, 1).await.unwrap()) + let user = EventUser::new(&pool, &User::find_by_id(&pool, 1).await.unwrap()) .await .unwrap(); Event::create(&pool, &user, "new-event".into(), 2, false, &trip_details).await; @@ -269,7 +269,7 @@ mod test { UserTrip::create(&pool, &rower, &trip_details, None) .await .unwrap(); - let cox = SteeringUser::new(&pool, User::find_by_name(&pool, "cox").await.unwrap()) + let cox = SteeringUser::new(&pool, &User::find_by_name(&pool, "cox").await.unwrap()) .await .unwrap(); Trip::new_join(&pool, &cox, &event).await.unwrap(); @@ -284,7 +284,7 @@ mod test { is_locked: event.is_locked, trip_type_id: None, }; - event.update(&pool, &cancel_update).await; + event.update(&pool, &user, &cancel_update).await; // Rower received notification let notifications = Notification::for_user(&pool, &rower).await; @@ -314,12 +314,12 @@ mod test { is_locked: event.is_locked, trip_type_id: None, }; - event.update(&pool, &update).await; + event.update(&pool, &user, &update).await; assert!(Notification::for_user(&pool, &rower).await.is_empty()); assert!(Notification::for_user(&pool, &cox.user).await.is_empty()); // Cancel event again - event.update(&pool, &cancel_update).await; + event.update(&pool, &user, &cancel_update).await; // Rower is removed if notification is accepted assert!(event.is_rower_registered(&pool, &rower).await); diff --git a/src/model/trip.rs b/src/model/trip.rs index 98dd878..36c0773 100644 --- a/src/model/trip.rs +++ b/src/model/trip.rs @@ -532,7 +532,7 @@ mod test { let cox = SteeringUser::new( &pool, - User::find_by_name(&pool, "cox".into()).await.unwrap(), + &User::find_by_name(&pool, "cox".into()).await.unwrap(), ) .await .unwrap(); @@ -549,7 +549,7 @@ mod test { let pool = testdb!(); let cox = SteeringUser::new( &pool, - User::find_by_name(&pool, "cox".into()).await.unwrap(), + &User::find_by_name(&pool, "cox".into()).await.unwrap(), ) .await .unwrap(); @@ -558,7 +558,7 @@ mod test { let cox2 = SteeringUser::new( &pool, - User::find_by_name(&pool, "cox2".into()).await.unwrap(), + &User::find_by_name(&pool, "cox2".into()).await.unwrap(), ) .await .unwrap(); @@ -587,7 +587,7 @@ mod test { let cox = SteeringUser::new( &pool, - User::find_by_name(&pool, "cox2".into()).await.unwrap(), + &User::find_by_name(&pool, "cox2".into()).await.unwrap(), ) .await .unwrap(); @@ -603,7 +603,7 @@ mod test { let cox = SteeringUser::new( &pool, - User::find_by_name(&pool, "cox2".into()).await.unwrap(), + &User::find_by_name(&pool, "cox2".into()).await.unwrap(), ) .await .unwrap(); @@ -620,7 +620,7 @@ mod test { let cox = SteeringUser::new( &pool, - User::find_by_name(&pool, "cox".into()).await.unwrap(), + &User::find_by_name(&pool, "cox".into()).await.unwrap(), ) .await .unwrap(); @@ -648,7 +648,7 @@ mod test { let cox = SteeringUser::new( &pool, - User::find_by_name(&pool, "cox".into()).await.unwrap(), + &User::find_by_name(&pool, "cox".into()).await.unwrap(), ) .await .unwrap(); @@ -676,7 +676,7 @@ mod test { let cox = SteeringUser::new( &pool, - User::find_by_name(&pool, "cox2".into()).await.unwrap(), + &User::find_by_name(&pool, "cox2".into()).await.unwrap(), ) .await .unwrap(); @@ -701,7 +701,7 @@ mod test { let cox = SteeringUser::new( &pool, - User::find_by_name(&pool, "cox".into()).await.unwrap(), + &User::find_by_name(&pool, "cox".into()).await.unwrap(), ) .await .unwrap(); @@ -724,7 +724,7 @@ mod test { let cox = SteeringUser::new( &pool, - User::find_by_name(&pool, "cox".into()).await.unwrap(), + &User::find_by_name(&pool, "cox".into()).await.unwrap(), ) .await .unwrap(); @@ -742,7 +742,7 @@ mod test { let cox = SteeringUser::new( &pool, - User::find_by_name(&pool, "cox2".into()).await.unwrap(), + &User::find_by_name(&pool, "cox2".into()).await.unwrap(), ) .await .unwrap(); @@ -764,7 +764,7 @@ mod test { let cox = SteeringUser::new( &pool, - User::find_by_name(&pool, "cox".into()).await.unwrap(), + &User::find_by_name(&pool, "cox".into()).await.unwrap(), ) .await .unwrap(); diff --git a/src/model/user/mod.rs b/src/model/user/mod.rs index 228f82e..707143f 100644 --- a/src/model/user/mod.rs +++ b/src/model/user/mod.rs @@ -27,6 +27,7 @@ use super::{ Day, }; use crate::{tera::admin::user::UserEditForm, AMOUNT_DAYS_TO_SHOW_TRIPS_AHEAD}; +use scheckbuch::ScheckbuchUser; mod fee; mod scheckbuch; @@ -112,6 +113,8 @@ impl User { .await?; } else if self.has_role(db, "schnupperant").await { self.send_welcome_mail_schnupper(db, mail, smtp_pw).await?; + } else if let Some(scheckbuch) = ScheckbuchUser::new(db, &self).await { + scheckbuch.notify(db, mail, smtp_pw).await?; } else { return Err(format!( "Could not send welcome mail, because user {} is not in Donau Linz or scheckbuch or schnupperant group", @@ -259,7 +262,7 @@ ASKÖ Ruderverein Donau Linz", self.name), } pub async fn allowed_to_update_always_show_trip(&self, db: &SqlitePool) -> bool { - AllowedToUpdateTripToAlwaysBeShownUser::new(db, self.clone()) + AllowedToUpdateTripToAlwaysBeShownUser::new(db, &self) .await .is_some() } @@ -989,9 +992,9 @@ macro_rules! special_user { } impl $name { - pub async fn new(db: &SqlitePool, user: User) -> Option { + pub async fn new(db: &SqlitePool, user: &User) -> Option { if special_user!(@check_roles user, db, $($role)*) { - Some($name { user }) + Some($name { user: user.clone() }) } else { None } diff --git a/src/model/user/scheckbuch.rs b/src/model/user/scheckbuch.rs index 033b6a3..3fc04fe 100644 --- a/src/model/user/scheckbuch.rs +++ b/src/model/user/scheckbuch.rs @@ -30,16 +30,23 @@ impl ScheckbuchUser { user.add_role(db, &scheckbuch).await.unwrap(); // TODO: remove all other `membership_type` roles + let new_user = Self::new(db, &user).await.unwrap(); - let new_user = Self::new(db, user).await.unwrap(); + new_user.notify(db, mail, smtp_pw).await + } - new_user - .send_welcome_mail_to_user(db, mail, smtp_pw) - .await?; - new_user.notify_coxes_about_new_scheckbuch(db).await; + pub(crate) async fn notify( + &self, + db: &SqlitePool, + mail: &str, + smtp_pw: &str, + ) -> Result<(), String> { + self.send_welcome_mail_to_user(db, mail, smtp_pw).await?; + self.notify_coxes_about_new_scheckbuch(db).await; Ok(()) } + async fn send_welcome_mail_to_user( &self, db: &SqlitePool, diff --git a/src/model/usertrip.rs b/src/model/usertrip.rs index 9f14ba6..c58f078 100644 --- a/src/model/usertrip.rs +++ b/src/model/usertrip.rs @@ -197,7 +197,7 @@ impl UserTrip { let mut add_info = ""; if let Some(trip) = &trip_to_delete { let cox = User::find_by_id(db, trip.cox_id as i32).await.unwrap(); - trip.delete(db, &SteeringUser::new(db, cox).await.unwrap()) + trip.delete(db, &SteeringUser::new(db, &cox).await.unwrap()) .await .unwrap(); add_info = " Das war die letzte angemeldete Person. Nachdem nun alle Bescheid wissen, wird die Ausfahrt ab sofort nicht mehr angezeigt."; @@ -355,7 +355,7 @@ mod test { let cox = SteeringUser::new( &pool, - User::find_by_name(&pool, "cox".into()).await.unwrap(), + &User::find_by_name(&pool, "cox".into()).await.unwrap(), ) .await .unwrap(); diff --git a/src/tera/admin/user.rs b/src/tera/admin/user.rs index 192560b..fe4e607 100644 --- a/src/tera/admin/user.rs +++ b/src/tera/admin/user.rs @@ -60,7 +60,7 @@ async fn index( .collect(); let user: User = user.into_inner(); - let allowed_to_edit = ManageUserUser::new(db, user.clone()).await.is_some(); + let allowed_to_edit = ManageUserUser::new(db, &user).await.is_some(); let users: Vec = join_all(user_futures).await; @@ -94,7 +94,7 @@ async fn index_admin( let users: Vec = join_all(user_futures).await; let user: User = user.user; - let allowed_to_edit = ManageUserUser::new(db, user.clone()).await.is_some(); + let allowed_to_edit = ManageUserUser::new(db, &user).await.is_some(); let roles = Role::all(db).await; let families = Family::all_with_members(db).await; diff --git a/src/tera/log.rs b/src/tera/log.rs index 6269819..1f33e3a 100644 --- a/src/tera/log.rs +++ b/src/tera/log.rs @@ -296,7 +296,7 @@ async fn create_kiosk( create_logbook( db, data, - &DonauLinzUser::new(db, creator).await.unwrap(), + &DonauLinzUser::new(db, &creator).await.unwrap(), &config.smtp_pw, ) .await @@ -390,7 +390,7 @@ async fn home_kiosk( logbook_id, &DonauLinzUser::new( db, - User::find_by_id(db, logbook.shipmaster as i32) + &User::find_by_id(db, logbook.shipmaster as i32) .await .unwrap(), )