use crate::structs::PostView;
use diesel::{
debug_query,
- dsl::*,
+ dsl::{now, IntervalDsl},
pg::Pg,
result::Error,
sql_function,
impl<'a> PostQuery<'a> {
pub async fn list(self) -> Result<Vec<PostView>, Error> {
- use diesel::dsl::*;
let conn = &mut get_conn(self.pool).await?;
// The left join below will return None in this case
}
}
}
-
- if let Some(community_id) = self.community_id {
+ if self.community_id.is_none() && self.community_actor_id.is_none() {
+ query = query.then_order_by(post_aggregates::featured_local.desc());
+ } else if let Some(community_id) = self.community_id {
query = query
.filter(post::community_id.eq(community_id))
- .then_order_by(post_aggregates::stickied.desc());
- }
-
- if let Some(community_actor_id) = self.community_actor_id {
+ .then_order_by(post_aggregates::featured_community.desc());
+ } else if let Some(community_actor_id) = self.community_actor_id {
query = query
.filter(community::actor_id.eq(community_actor_id))
- .then_order_by(post_aggregates::stickied.desc());
+ .then_order_by(post_aggregates::featured_community.desc());
}
if let Some(url_search) = self.url_search {
let searcher = fuzzy_search(&search_term);
query = query.filter(
post::name
- .ilike(searcher.to_owned())
+ .ilike(searcher.clone())
.or(post::body.ilike(searcher)),
);
}
};
if self.saved_only.unwrap_or(false) {
- query = query.filter(post_saved::id.is_not_null());
+ query = query.filter(post_saved::post_id.is_not_null());
}
// Only hide the read posts, if the saved_only is false. Otherwise ppl with the hide_read
// setting wont be able to see saved posts.
else if !self.local_user.map(|l| l.show_read_posts).unwrap_or(true) {
- query = query.filter(post_read::id.is_null());
+ query = query.filter(post_read::post_id.is_null());
}
if self.local_user.is_some() {
// Filter out the rows with missing languages
- query = query.filter(local_user_language::id.is_not_null());
+ query = query.filter(local_user_language::language_id.is_not_null());
// Don't show blocked communities or persons
query = query.filter(community_block::person_id.is_null());
newtypes::LanguageId,
source::{
actor_language::LocalUserLanguage,
- community::*,
+ community::{Community, CommunityInsertForm, CommunitySafe},
community_block::{CommunityBlock, CommunityBlockForm},
instance::Instance,
language::Language,
local_user::{LocalUser, LocalUserInsertForm, LocalUserUpdateForm},
- person::*,
+ person::{Person, PersonInsertForm, PersonSafe},
person_block::{PersonBlock, PersonBlockForm},
- post::*,
+ post::{Post, PostInsertForm, PostLike, PostLikeForm},
},
traits::{Blockable, Crud, Likeable},
utils::{build_db_pool_for_tests, DbPool},
let person_name = "tegan".to_string();
let new_person = PersonInsertForm::builder()
- .name(person_name.to_owned())
+ .name(person_name.clone())
.public_key("pubkey".to_string())
.instance_id(inserted_instance.id)
.build();
let local_user_form = LocalUserInsertForm::builder()
.person_id(inserted_person.id)
- .password_encrypted("".to_string())
+ .password_encrypted(String::new())
.build();
let inserted_local_user = LocalUser::create(pool, &local_user_form).await.unwrap();
let pool = &build_db_pool_for_tests().await;
let data = init_data(pool).await;
- let spanish_id = Language::read_id_from_code(pool, "es").await.unwrap();
+ let spanish_id = Language::read_id_from_code(pool, Some("es"))
+ .await
+ .unwrap()
+ .unwrap();
let post_spanish = PostInsertForm::builder()
.name("asffgdsc".to_string())
.creator_id(data.inserted_person.id)
// no language filters specified, all posts should be returned
assert_eq!(3, post_listings_all.len());
- let french_id = Language::read_id_from_code(pool, "fr").await.unwrap();
+ let french_id = Language::read_id_from_code(pool, Some("fr"))
+ .await
+ .unwrap()
+ .unwrap();
LocalUserLanguage::update(pool, vec![french_id], data.inserted_local_user.id)
.await
.unwrap();
assert_eq!(1, post_listing_french.len());
assert_eq!(french_id, post_listing_french[0].post.language_id);
- let undetermined_id = Language::read_id_from_code(pool, "und").await.unwrap();
+ let undetermined_id = Language::read_id_from_code(pool, Some("und"))
+ .await
+ .unwrap()
+ .unwrap();
LocalUserLanguage::update(
pool,
vec![french_id, undetermined_id],
removed: false,
deleted: false,
locked: false,
- stickied: false,
nsfw: false,
embed_title: None,
embed_description: None,
embed_video_url: None,
thumbnail_url: None,
- ap_id: inserted_post.ap_id.to_owned(),
+ ap_id: inserted_post.ap_id.clone(),
local: true,
language_id: LanguageId(47),
+ featured_community: false,
+ featured_local: false,
},
my_vote: None,
unread_comments: 0,
display_name: None,
published: inserted_person.published,
avatar: None,
- actor_id: inserted_person.actor_id.to_owned(),
+ actor_id: inserted_person.actor_id.clone(),
local: true,
admin: false,
bot_account: false,
bio: None,
banner: None,
updated: None,
- inbox_url: inserted_person.inbox_url.to_owned(),
+ inbox_url: inserted_person.inbox_url.clone(),
shared_inbox_url: None,
matrix_user_id: None,
ban_expires: None,
removed: false,
deleted: false,
nsfw: false,
- actor_id: inserted_community.actor_id.to_owned(),
+ actor_id: inserted_community.actor_id.clone(),
local: true,
title: "nada".to_owned(),
description: None,
score: 0,
upvotes: 0,
downvotes: 0,
- stickied: false,
published: agg.published,
newest_comment_time_necro: inserted_post.published,
newest_comment_time: inserted_post.published,
+ featured_community: false,
+ featured_local: false,
},
subscribed: SubscribedType::NotSubscribed,
read: false,