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();
|
||||
Ok(
|
||||
blocking(context.pool(), move |conn| {
|
||||
DbActor::read_from_name(conn, &identifier)
|
||||
DbActor::read_from_name(conn, &identifier, false)
|
||||
})
|
||||
.await??,
|
||||
)
|
||||
|
|
|
@ -35,7 +35,7 @@ pub(crate) async fn get_apub_community_http(
|
|||
context: web::Data<LemmyContext>,
|
||||
) -> Result<HttpResponse, LemmyError> {
|
||||
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??
|
||||
.into();
|
||||
|
@ -66,7 +66,7 @@ pub(crate) async fn get_apub_community_followers(
|
|||
context: web::Data<LemmyContext>,
|
||||
) -> Result<HttpResponse, LemmyError> {
|
||||
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??;
|
||||
let followers = GroupFollowers::new(community, &context).await?;
|
||||
|
@ -80,7 +80,7 @@ pub(crate) async fn get_apub_community_outbox(
|
|||
context: web::Data<LemmyContext>,
|
||||
) -> Result<HttpResponse, LemmyError> {
|
||||
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??;
|
||||
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>,
|
||||
) -> Result<HttpResponse, LemmyError> {
|
||||
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??
|
||||
.into();
|
||||
|
|
|
@ -28,7 +28,7 @@ pub(crate) async fn get_apub_person_http(
|
|||
let user_name = info.into_inner().user_name;
|
||||
// TODO: this needs to be able to read deleted persons, so that it can send tombstones
|
||||
let person: ApubPerson = blocking(context.pool(), move |conn| {
|
||||
Person::read_from_name(conn, &user_name)
|
||||
Person::read_from_name(conn, &user_name, true)
|
||||
})
|
||||
.await??
|
||||
.into();
|
||||
|
@ -60,7 +60,7 @@ pub(crate) async fn get_apub_person_outbox(
|
|||
context: web::Data<LemmyContext>,
|
||||
) -> Result<HttpResponse, LemmyError> {
|
||||
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??;
|
||||
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::*;
|
||||
community
|
||||
let mut q = community
|
||||
.into_boxed()
|
||||
.filter(local.eq(true))
|
||||
.filter(lower(name).eq(lower(community_name)))
|
||||
.first::<Self>(conn)
|
||||
.filter(lower(name).eq(lower(community_name)));
|
||||
if !include_deleted {
|
||||
q = q.filter(deleted.eq(false)).filter(removed.eq(false));
|
||||
}
|
||||
q.first::<Self>(conn)
|
||||
}
|
||||
|
||||
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> {
|
||||
person
|
||||
.filter(deleted.eq(false))
|
||||
fn read_from_name(
|
||||
conn: &PgConnection,
|
||||
from_name: &str,
|
||||
include_deleted: bool,
|
||||
) -> Result<Person, Error> {
|
||||
let mut q = person
|
||||
.into_boxed()
|
||||
.filter(local.eq(true))
|
||||
.filter(lower(name).eq(lower(from_name)))
|
||||
.first::<Person>(conn)
|
||||
.filter(lower(name).eq(lower(from_name)));
|
||||
if !include_deleted {
|
||||
q = q.filter(deleted.eq(false))
|
||||
}
|
||||
q.first::<Self>(conn)
|
||||
}
|
||||
|
||||
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>
|
||||
where
|
||||
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
|
||||
Self: Sized;
|
||||
fn read_from_name_and_domain(
|
||||
|
|
|
@ -181,7 +181,7 @@ fn get_feed_user(
|
|||
protocol_and_hostname: &str,
|
||||
) -> Result<ChannelBuilder, LemmyError> {
|
||||
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)
|
||||
.listing_type(ListingType::All)
|
||||
|
@ -210,7 +210,7 @@ fn get_feed_community(
|
|||
protocol_and_hostname: &str,
|
||||
) -> Result<ChannelBuilder, LemmyError> {
|
||||
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)
|
||||
.listing_type(ListingType::Community)
|
||||
|
|
|
@ -46,13 +46,13 @@ async fn get_webfinger_response(
|
|||
|
||||
let name_ = name.clone();
|
||||
let user_id: Option<Url> = blocking(context.pool(), move |conn| {
|
||||
Person::read_from_name(conn, &name_)
|
||||
Person::read_from_name(conn, &name_, false)
|
||||
})
|
||||
.await?
|
||||
.ok()
|
||||
.map(|c| c.actor_id.into());
|
||||
let community_id: Option<Url> = blocking(context.pool(), move |conn| {
|
||||
Community::read_from_name(conn, &name)
|
||||
Community::read_from_name(conn, &name, false)
|
||||
})
|
||||
.await?
|
||||
.ok()
|
||||
|
|
Loading…
Reference in a new issue