diff --git a/crates/api/src/site.rs b/crates/api/src/site.rs index bcab23fc3..c77b177fa 100644 --- a/crates/api/src/site.rs +++ b/crates/api/src/site.rs @@ -477,6 +477,12 @@ impl Perform for LeaveAdmin { is_admin(&local_user_view)?; + // Make sure there isn't just one admin (so if one leaves, there will still be one left) + let admins = blocking(context.pool(), PersonViewSafe::admins).await??; + if admins.len() == 1 { + return Err(LemmyError::from_message("cannot_leave_admin")); + } + let person_id = local_user_view.person.id; blocking(context.pool(), move |conn| { Person::leave_admin(conn, person_id) diff --git a/crates/db_schema/src/aggregates/site_aggregates.rs b/crates/db_schema/src/aggregates/site_aggregates.rs index 7bbcaff61..b94899247 100644 --- a/crates/db_schema/src/aggregates/site_aggregates.rs +++ b/crates/db_schema/src/aggregates/site_aggregates.rs @@ -132,7 +132,12 @@ mod tests { let community_num_deleted = Community::delete(&conn, inserted_community.id).unwrap(); assert_eq!(1, community_num_deleted); - let after_delete = SiteAggregates::read(&conn); - assert!(after_delete.is_err()); + // Site should still exist, it can without a site creator. + let after_delete_creator = SiteAggregates::read(&conn); + assert!(after_delete_creator.is_ok()); + + Site::delete(&conn, 1).unwrap(); + let after_delete_site = SiteAggregates::read(&conn); + assert!(after_delete_site.is_err()); } }