diff --git a/crates/api/src/community.rs b/crates/api/src/community.rs index 2c491e72d..1a50a67de 100644 --- a/crates/api/src/community.rs +++ b/crates/api/src/community.rs @@ -40,6 +40,7 @@ use lemmy_db_schema::{ ModTransferCommunityForm, }, person::Person, + site::Site, }, traits::{Bannable, Blockable, Crud, Followable, Joinable}, }; diff --git a/crates/api/src/site.rs b/crates/api/src/site.rs index 54ce507e7..2f8fed63e 100644 --- a/crates/api/src/site.rs +++ b/crates/api/src/site.rs @@ -473,7 +473,7 @@ impl Perform for TransferSite { is_admin(&local_user_view)?; - let read_site = blocking(context.pool(), Site::read_simple).await??; + let read_site = blocking(context.pool(), Site::read_local_site).await??; // Make sure user is the creator if read_site.creator_id != local_user_view.person.id { diff --git a/crates/db_schema/src/impls/site.rs b/crates/db_schema/src/impls/site.rs index 60d2c013c..9193e7884 100644 --- a/crates/db_schema/src/impls/site.rs +++ b/crates/db_schema/src/impls/site.rs @@ -1,4 +1,4 @@ -use crate::{source::site::*, traits::Crud, DbUrl}; +use crate::{naive_now, newtypes::PersonId, source::site::*, traits::Crud, DbUrl}; use diesel::{dsl::*, result::Error, *}; use url::Url; @@ -28,6 +28,13 @@ impl Crud for Site { } impl Site { + pub fn transfer(conn: &PgConnection, new_creator_id: PersonId) -> Result { + use crate::schema::site::dsl::*; + diesel::update(site.find(1)) + .set((creator_id.eq(new_creator_id), updated.eq(naive_now()))) + .get_result::(conn) + } + pub fn read_local_site(conn: &PgConnection) -> Result { use crate::schema::site::dsl::*; site.order_by(id).first::(conn) diff --git a/crates/db_views/src/site_view.rs b/crates/db_views/src/site_view.rs index 811b3f36f..5e4ff9f20 100644 --- a/crates/db_views/src/site_view.rs +++ b/crates/db_views/src/site_view.rs @@ -19,8 +19,9 @@ pub struct SiteView { impl SiteView { pub fn read(conn: &PgConnection) -> Result { - let (mut site, counts) = site::table + let (mut site, creator, counts) = site::table .inner_join(site_aggregates::table) + .inner_join(person::table) .select(( site::all_columns, Person::safe_columns_tuple(), @@ -29,6 +30,10 @@ impl SiteView { .first::<(Site, PersonSafe, SiteAggregates)>(conn)?; site.private_key = None; - Ok(SiteView { site, counts }) + Ok(SiteView { + site, + creator, + counts, + }) } }