fuzzy_search,
limit_and_offset,
newtypes::{CommunityId, PersonId},
- schema::{community, community_aggregates, community_block, community_follower},
+ schema::{community, community_aggregates, community_block, community_follower, local_user},
source::{
community::{Community, CommunityFollower, CommunitySafe},
community_block::CommunityBlock,
let mut query = community::table
.inner_join(community_aggregates::table)
+ .left_join(local_user::table.on(local_user::person_id.eq(person_id_join)))
.left_join(
community_follower::table.on(
community::id
}
};
- if !self.show_nsfw.unwrap_or(false) {
- query = query.filter(community::nsfw.eq(false));
- };
-
if let Some(listing_type) = self.listing_type {
query = match listing_type {
ListingType::Subscribed => query.filter(community_follower::person_id.is_not_null()), // TODO could be this: and(community_follower::person_id.eq(person_id_join)),
};
}
- // Don't show blocked communities
+ // Don't show blocked communities or nsfw communities if not enabled in profile
if self.my_person_id.is_some() {
query = query.filter(community_block::person_id.is_null());
+ query = query.filter(community::nsfw.eq(false).or(local_user::show_nsfw.eq(true)));
+ } else {
+ // No person in request, only show nsfw communities if show_nsfw passed into request
+ if !self.show_nsfw.unwrap_or(false) {
+ query = query.filter(community::nsfw.eq(false));
+ }
}
let (limit, offset) = limit_and_offset(self.page, self.limit);