diff --git a/src/model/planned_event.rs b/src/model/planned_event.rs index 6ecef00..2db5692 100644 --- a/src/model/planned_event.rs +++ b/src/model/planned_event.rs @@ -240,11 +240,29 @@ INNER JOIN trip_details ON planned_event.trip_details_id = trip_details.id", .unwrap(); //Okay, as planned_event can only be created with proper DB backing } - pub async fn delete(&self, db: &SqlitePool) { + pub async fn delete(&self, db: &SqlitePool) -> Result<(), String> { + if Registration::all_rower(db, self.trip_details_id) + .await + .len() + > 0 + { + return Err( + "Event kann nicht gelöscht werden, weil mind. 1 Ruderer angemeldet ist.".into(), + ); + } + if Registration::all_cox(db, self.trip_details_id).await.len() > 0 { + return Err( + "Event kann nicht gelöscht werden, weil mind. 1 Steuerperson angemeldet ist." + .into(), + ); + } + sqlx::query!("DELETE FROM planned_event WHERE id = ?", self.id) .execute(db) .await .unwrap(); //Okay, as PlannedEvent can only be created with proper DB backing + + Ok(()) } pub async fn get_ics_feed(db: &SqlitePool) -> String { diff --git a/src/tera/admin/planned_event.rs b/src/tera/admin/planned_event.rs index d198c30..18a04e9 100644 --- a/src/tera/admin/planned_event.rs +++ b/src/tera/admin/planned_event.rs @@ -78,12 +78,13 @@ async fn update( #[get("/planned-event//delete")] async fn delete(db: &State, id: i64, _admin: PlannedEventUser) -> Flash { - match PlannedEvent::find_by_id(db, id).await { - Some(planned_event) => { - planned_event.delete(db).await; - Flash::success(Redirect::to("/planned"), "Event gelöscht") - } - None => Flash::error(Redirect::to("/planned"), "PlannedEvent does not exist"), + let Some(event) = PlannedEvent::find_by_id(db, id).await else { + return Flash::error(Redirect::to("/planned"), "PlannedEvent does not exist"); + }; + + match event.delete(db).await { + Ok(()) => Flash::success(Redirect::to("/planned"), "Event gelöscht"), + Err(e) => Flash::error(Redirect::to("/planned"), e), } }