mirror of
https://github.com/LemmyNet/lemmy.git
synced 2024-11-16 09:24:00 +00:00
Be more explicit about returning deleted actors or not (#2335)
* Be more explicit about returning deleted actors or not * simplify db queries
This commit is contained in:
parent
587a0de8f7
commit
b7a2677b4d
8 changed files with 42 additions and 21 deletions
|
@ -58,7 +58,7 @@ where
|
||||||
let identifier = identifier.to_string();
|
let identifier = identifier.to_string();
|
||||||
Ok(
|
Ok(
|
||||||
blocking(context.pool(), move |conn| {
|
blocking(context.pool(), move |conn| {
|
||||||
DbActor::read_from_name(conn, &identifier)
|
DbActor::read_from_name(conn, &identifier, false)
|
||||||
})
|
})
|
||||||
.await??,
|
.await??,
|
||||||
)
|
)
|
||||||
|
|
|
@ -35,7 +35,7 @@ pub(crate) async fn get_apub_community_http(
|
||||||
context: web::Data<LemmyContext>,
|
context: web::Data<LemmyContext>,
|
||||||
) -> Result<HttpResponse, LemmyError> {
|
) -> Result<HttpResponse, LemmyError> {
|
||||||
let community: ApubCommunity = blocking(context.pool(), move |conn| {
|
let community: ApubCommunity = blocking(context.pool(), move |conn| {
|
||||||
Community::read_from_name(conn, &info.community_name)
|
Community::read_from_name(conn, &info.community_name, true)
|
||||||
})
|
})
|
||||||
.await??
|
.await??
|
||||||
.into();
|
.into();
|
||||||
|
@ -66,7 +66,7 @@ pub(crate) async fn get_apub_community_followers(
|
||||||
context: web::Data<LemmyContext>,
|
context: web::Data<LemmyContext>,
|
||||||
) -> Result<HttpResponse, LemmyError> {
|
) -> Result<HttpResponse, LemmyError> {
|
||||||
let community = blocking(context.pool(), move |conn| {
|
let community = blocking(context.pool(), move |conn| {
|
||||||
Community::read_from_name(conn, &info.community_name)
|
Community::read_from_name(conn, &info.community_name, false)
|
||||||
})
|
})
|
||||||
.await??;
|
.await??;
|
||||||
let followers = GroupFollowers::new(community, &context).await?;
|
let followers = GroupFollowers::new(community, &context).await?;
|
||||||
|
@ -80,7 +80,7 @@ pub(crate) async fn get_apub_community_outbox(
|
||||||
context: web::Data<LemmyContext>,
|
context: web::Data<LemmyContext>,
|
||||||
) -> Result<HttpResponse, LemmyError> {
|
) -> Result<HttpResponse, LemmyError> {
|
||||||
let community = blocking(context.pool(), move |conn| {
|
let community = blocking(context.pool(), move |conn| {
|
||||||
Community::read_from_name(conn, &info.community_name)
|
Community::read_from_name(conn, &info.community_name, false)
|
||||||
})
|
})
|
||||||
.await??;
|
.await??;
|
||||||
let id = ObjectId::new(generate_outbox_url(&community.actor_id)?);
|
let id = ObjectId::new(generate_outbox_url(&community.actor_id)?);
|
||||||
|
@ -97,7 +97,7 @@ pub(crate) async fn get_apub_community_moderators(
|
||||||
context: web::Data<LemmyContext>,
|
context: web::Data<LemmyContext>,
|
||||||
) -> Result<HttpResponse, LemmyError> {
|
) -> Result<HttpResponse, LemmyError> {
|
||||||
let community: ApubCommunity = blocking(context.pool(), move |conn| {
|
let community: ApubCommunity = blocking(context.pool(), move |conn| {
|
||||||
Community::read_from_name(conn, &info.community_name)
|
Community::read_from_name(conn, &info.community_name, false)
|
||||||
})
|
})
|
||||||
.await??
|
.await??
|
||||||
.into();
|
.into();
|
||||||
|
|
|
@ -28,7 +28,7 @@ pub(crate) async fn get_apub_person_http(
|
||||||
let user_name = info.into_inner().user_name;
|
let user_name = info.into_inner().user_name;
|
||||||
// TODO: this needs to be able to read deleted persons, so that it can send tombstones
|
// TODO: this needs to be able to read deleted persons, so that it can send tombstones
|
||||||
let person: ApubPerson = blocking(context.pool(), move |conn| {
|
let person: ApubPerson = blocking(context.pool(), move |conn| {
|
||||||
Person::read_from_name(conn, &user_name)
|
Person::read_from_name(conn, &user_name, true)
|
||||||
})
|
})
|
||||||
.await??
|
.await??
|
||||||
.into();
|
.into();
|
||||||
|
@ -60,7 +60,7 @@ pub(crate) async fn get_apub_person_outbox(
|
||||||
context: web::Data<LemmyContext>,
|
context: web::Data<LemmyContext>,
|
||||||
) -> Result<HttpResponse, LemmyError> {
|
) -> Result<HttpResponse, LemmyError> {
|
||||||
let person = blocking(context.pool(), move |conn| {
|
let person = blocking(context.pool(), move |conn| {
|
||||||
Person::read_from_name(conn, &info.user_name)
|
Person::read_from_name(conn, &info.user_name, false)
|
||||||
})
|
})
|
||||||
.await??;
|
.await??;
|
||||||
let outbox_id = generate_outbox_url(&person.actor_id)?.into();
|
let outbox_id = generate_outbox_url(&person.actor_id)?.into();
|
||||||
|
|
|
@ -332,12 +332,20 @@ impl ApubActor for Community {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn read_from_name(conn: &PgConnection, community_name: &str) -> Result<Community, Error> {
|
fn read_from_name(
|
||||||
|
conn: &PgConnection,
|
||||||
|
community_name: &str,
|
||||||
|
include_deleted: bool,
|
||||||
|
) -> Result<Community, Error> {
|
||||||
use crate::schema::community::dsl::*;
|
use crate::schema::community::dsl::*;
|
||||||
community
|
let mut q = community
|
||||||
|
.into_boxed()
|
||||||
.filter(local.eq(true))
|
.filter(local.eq(true))
|
||||||
.filter(lower(name).eq(lower(community_name)))
|
.filter(lower(name).eq(lower(community_name)));
|
||||||
.first::<Self>(conn)
|
if !include_deleted {
|
||||||
|
q = q.filter(deleted.eq(false)).filter(removed.eq(false));
|
||||||
|
}
|
||||||
|
q.first::<Self>(conn)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn read_from_name_and_domain(
|
fn read_from_name_and_domain(
|
||||||
|
|
|
@ -305,12 +305,19 @@ impl ApubActor for Person {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn read_from_name(conn: &PgConnection, from_name: &str) -> Result<Person, Error> {
|
fn read_from_name(
|
||||||
person
|
conn: &PgConnection,
|
||||||
.filter(deleted.eq(false))
|
from_name: &str,
|
||||||
|
include_deleted: bool,
|
||||||
|
) -> Result<Person, Error> {
|
||||||
|
let mut q = person
|
||||||
|
.into_boxed()
|
||||||
.filter(local.eq(true))
|
.filter(local.eq(true))
|
||||||
.filter(lower(name).eq(lower(from_name)))
|
.filter(lower(name).eq(lower(from_name)));
|
||||||
.first::<Person>(conn)
|
if !include_deleted {
|
||||||
|
q = q.filter(deleted.eq(false))
|
||||||
|
}
|
||||||
|
q.first::<Self>(conn)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn read_from_name_and_domain(
|
fn read_from_name_and_domain(
|
||||||
|
|
|
@ -168,7 +168,13 @@ pub trait ApubActor {
|
||||||
fn read_from_apub_id(conn: &PgConnection, object_id: &DbUrl) -> Result<Option<Self>, Error>
|
fn read_from_apub_id(conn: &PgConnection, object_id: &DbUrl) -> Result<Option<Self>, Error>
|
||||||
where
|
where
|
||||||
Self: Sized;
|
Self: Sized;
|
||||||
fn read_from_name(conn: &PgConnection, actor_name: &str) -> Result<Self, Error>
|
/// - actor_name is the name of the community or user to read.
|
||||||
|
/// - include_deleted, if true, will return communities or users that were deleted/removed
|
||||||
|
fn read_from_name(
|
||||||
|
conn: &PgConnection,
|
||||||
|
actor_name: &str,
|
||||||
|
include_deleted: bool,
|
||||||
|
) -> Result<Self, Error>
|
||||||
where
|
where
|
||||||
Self: Sized;
|
Self: Sized;
|
||||||
fn read_from_name_and_domain(
|
fn read_from_name_and_domain(
|
||||||
|
|
|
@ -181,7 +181,7 @@ fn get_feed_user(
|
||||||
protocol_and_hostname: &str,
|
protocol_and_hostname: &str,
|
||||||
) -> Result<ChannelBuilder, LemmyError> {
|
) -> Result<ChannelBuilder, LemmyError> {
|
||||||
let site_view = SiteView::read_local(conn)?;
|
let site_view = SiteView::read_local(conn)?;
|
||||||
let person = Person::read_from_name(conn, user_name)?;
|
let person = Person::read_from_name(conn, user_name, false)?;
|
||||||
|
|
||||||
let posts = PostQueryBuilder::create(conn)
|
let posts = PostQueryBuilder::create(conn)
|
||||||
.listing_type(ListingType::All)
|
.listing_type(ListingType::All)
|
||||||
|
@ -210,7 +210,7 @@ fn get_feed_community(
|
||||||
protocol_and_hostname: &str,
|
protocol_and_hostname: &str,
|
||||||
) -> Result<ChannelBuilder, LemmyError> {
|
) -> Result<ChannelBuilder, LemmyError> {
|
||||||
let site_view = SiteView::read_local(conn)?;
|
let site_view = SiteView::read_local(conn)?;
|
||||||
let community = Community::read_from_name(conn, community_name)?;
|
let community = Community::read_from_name(conn, community_name, false)?;
|
||||||
|
|
||||||
let posts = PostQueryBuilder::create(conn)
|
let posts = PostQueryBuilder::create(conn)
|
||||||
.listing_type(ListingType::Community)
|
.listing_type(ListingType::Community)
|
||||||
|
|
|
@ -46,13 +46,13 @@ async fn get_webfinger_response(
|
||||||
|
|
||||||
let name_ = name.clone();
|
let name_ = name.clone();
|
||||||
let user_id: Option<Url> = blocking(context.pool(), move |conn| {
|
let user_id: Option<Url> = blocking(context.pool(), move |conn| {
|
||||||
Person::read_from_name(conn, &name_)
|
Person::read_from_name(conn, &name_, false)
|
||||||
})
|
})
|
||||||
.await?
|
.await?
|
||||||
.ok()
|
.ok()
|
||||||
.map(|c| c.actor_id.into());
|
.map(|c| c.actor_id.into());
|
||||||
let community_id: Option<Url> = blocking(context.pool(), move |conn| {
|
let community_id: Option<Url> = blocking(context.pool(), move |conn| {
|
||||||
Community::read_from_name(conn, &name)
|
Community::read_from_name(conn, &name, false)
|
||||||
})
|
})
|
||||||
.await?
|
.await?
|
||||||
.ok()
|
.ok()
|
||||||
|
|
Loading…
Reference in a new issue