add code for local_user_discussion_language_view

This commit is contained in:
Felix Ableitner 2022-07-13 12:38:19 +02:00
parent 87f77e7030
commit 624f4dfbab
17 changed files with 82 additions and 39 deletions

View file

@ -152,7 +152,6 @@ impl Perform for SaveUserSettings {
send_notifications_to_email: data.send_notifications_to_email,
email_verified: None,
accepted_application: None,
discussion_languages,
};
let local_user_res = blocking(context.pool(), move |conn| {

View file

@ -9,7 +9,7 @@ pub struct Login {
pub password: Sensitive<String>,
}
use lemmy_db_schema::{
newtypes::{CommunityId, PersonId, PersonMentionId, PrivateMessageId},
newtypes::{CommunityId, LanguageId, PersonId, PersonMentionId, PrivateMessageId},
SortType,
};
@ -63,7 +63,7 @@ pub struct SaveUserSettings {
pub show_bot_accounts: Option<bool>,
pub show_read_posts: Option<bool>,
pub show_new_post_notifs: Option<bool>,
pub discussion_languages: Option<Vec<String>>,
pub discussion_languages: Option<Vec<LanguageId>>,
pub auth: Sensitive<String>,
}

View file

@ -174,6 +174,7 @@ pub struct MyUserInfo {
pub moderates: Vec<CommunityModeratorView>,
pub community_blocks: Vec<CommunityBlockView>,
pub person_blocks: Vec<PersonBlockView>,
pub discussion_languages: Vec<Language>,
}
#[derive(Debug, Serialize, Deserialize, Clone)]

View file

@ -33,7 +33,6 @@ mod safe_settings_type {
show_new_post_notifs,
email_verified,
accepted_application,
discussion_languages,
);
impl ToSafeSettings for LocalUser {
@ -59,7 +58,6 @@ mod safe_settings_type {
show_new_post_notifs,
email_verified,
accepted_application,
discussion_languages,
)
}
}

View file

@ -162,7 +162,6 @@ table! {
show_new_post_notifs -> Bool,
email_verified -> Bool,
accepted_application -> Bool,
discussion_languages -> Array<Int4>,
}
}

View file

@ -24,6 +24,7 @@ use lemmy_db_schema::{
},
source::{
community::{Community, CommunityFollower, CommunityPersonBan, CommunitySafe},
language::Language,
person::{Person, PersonSafe},
person_block::PersonBlock,
post::{Post, PostRead, PostSaved},
@ -46,6 +47,7 @@ type PostViewTuple = (
Option<PostRead>,
Option<PersonBlock>,
Option<i16>,
Language,
);
impl PostView {
@ -257,10 +259,7 @@ impl<'a> PostQueryBuilder<'a> {
self.show_nsfw = Some(user.local_user.show_nsfw);
self.show_bot_accounts = Some(user.local_user.show_bot_accounts);
self.show_read_posts = Some(user.local_user.show_read_posts);
// if user has no languages set, then dont filter by language
if !user.local_user.discussion_languages.is_empty() {
self.languages = Some(user.local_user.discussion_languages.clone());
}
//TODO: add local user discussion languages (need to store them in LocalUserView?)
}
self
}

View file

@ -33,10 +33,10 @@ impl ViewToVec for CommunityBlockView {
type DbTuple = CommunityBlockViewTuple;
fn from_tuple_to_vec(items: Vec<Self::DbTuple>) -> Vec<Self> {
items
.iter()
.into_iter()
.map(|a| Self {
person: a.0.to_owned(),
community: a.1.to_owned(),
person: a.0,
community: a.1,
})
.collect::<Vec<Self>>()
}

View file

@ -48,10 +48,10 @@ impl ViewToVec for CommunityFollowerView {
type DbTuple = CommunityFollowerViewTuple;
fn from_tuple_to_vec(items: Vec<Self::DbTuple>) -> Vec<Self> {
items
.iter()
.into_iter()
.map(|a| Self {
community: a.0.to_owned(),
follower: a.1.to_owned(),
community: a.0,
follower: a.1,
})
.collect::<Vec<Self>>()
}

View file

@ -70,10 +70,10 @@ impl ViewToVec for CommunityModeratorView {
type DbTuple = CommunityModeratorViewTuple;
fn from_tuple_to_vec(items: Vec<Self::DbTuple>) -> Vec<Self> {
items
.iter()
.into_iter()
.map(|a| Self {
community: a.0.to_owned(),
moderator: a.1.to_owned(),
community: a.0,
moderator: a.1,
})
.collect::<Vec<Self>>()
}

View file

@ -258,10 +258,10 @@ impl ViewToVec for CommunityView {
type DbTuple = CommunityViewTuple;
fn from_tuple_to_vec(items: Vec<Self::DbTuple>) -> Vec<Self> {
items
.iter()
.into_iter()
.map(|a| Self {
community: a.0.to_owned(),
counts: a.1.to_owned(),
community: a.0,
counts: a.1,
subscribed: CommunityFollower::to_subscribed_type(&a.2),
blocked: a.3.is_some(),
})

View file

@ -9,6 +9,8 @@ pub mod community_person_ban_view;
#[cfg(feature = "full")]
pub mod community_view;
#[cfg(feature = "full")]
pub mod local_user_discusion_language_view;
#[cfg(feature = "full")]
pub mod person_block_view;
#[cfg(feature = "full")]
pub mod person_mention_view;

View file

@ -0,0 +1,37 @@
use crate::structs::LocalUserDiscussionLanguageView;
use diesel::{result::Error, ExpressionMethods, PgConnection, QueryDsl, RunQueryDsl};
use lemmy_db_schema::{
newtypes::LocalUserId,
schema::{language, local_user, local_user_language},
source::{
language::Language,
local_user::{LocalUser, LocalUserSettings},
},
traits::ToSafeSettings,
};
type LocalUserDiscussionLanguageViewTuple = (LocalUserSettings, Language);
impl LocalUserDiscussionLanguageView {
pub fn read(conn: &PgConnection, local_user_id: LocalUserId) -> Result<Vec<Self>, Error> {
let res = local_user_language::table
.inner_join(local_user::table)
.inner_join(language::table)
.select((
LocalUser::safe_settings_columns_tuple(),
language::all_columns,
))
.filter(local_user::id.eq(local_user_id))
.load::<LocalUserDiscussionLanguageViewTuple>(conn)?;
Ok(
res
.into_iter()
.map(|a| Self {
local_user: a.0,
language: a.1,
})
.collect::<Vec<Self>>(),
)
}
}

View file

@ -30,10 +30,10 @@ impl ViewToVec for PersonBlockView {
type DbTuple = PersonBlockViewTuple;
fn from_tuple_to_vec(items: Vec<Self::DbTuple>) -> Vec<Self> {
items
.iter()
.into_iter()
.map(|a| Self {
person: a.0.to_owned(),
target: a.1.to_owned(),
person: a.0,
target: a.1,
})
.collect::<Vec<Self>>()
}

View file

@ -326,15 +326,15 @@ impl ViewToVec for PersonMentionView {
type DbTuple = PersonMentionViewTuple;
fn from_tuple_to_vec(items: Vec<Self::DbTuple>) -> Vec<Self> {
items
.iter()
.into_iter()
.map(|a| Self {
person_mention: a.0.to_owned(),
comment: a.1.to_owned(),
creator: a.2.to_owned(),
post: a.3.to_owned(),
community: a.4.to_owned(),
recipient: a.5.to_owned(),
counts: a.6.to_owned(),
person_mention: a.0,
comment: a.1,
creator: a.2,
post: a.3,
community: a.4,
recipient: a.5,
counts: a.6,
creator_banned_from_community: a.7.is_some(),
subscribed: CommunityFollower::to_subscribed_type(&a.8),
saved: a.9.is_some(),

View file

@ -137,10 +137,10 @@ impl ViewToVec for PersonViewSafe {
type DbTuple = PersonViewSafeTuple;
fn from_tuple_to_vec(items: Vec<Self::DbTuple>) -> Vec<Self> {
items
.iter()
.into_iter()
.map(|a| Self {
person: a.0.to_owned(),
counts: a.1.to_owned(),
person: a.0,
counts: a.1,
})
.collect::<Vec<Self>>()
}

View file

@ -3,6 +3,8 @@ use lemmy_db_schema::{
source::{
comment::Comment,
community::CommunitySafe,
language::Language,
local_user::LocalUserSettings,
person::{PersonSafe, PersonSafeAlias1},
person_mention::PersonMention,
post::Post,
@ -70,3 +72,9 @@ pub struct PersonViewSafe {
pub person: PersonSafe,
pub counts: PersonAggregates,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct LocalUserDiscussionLanguageView {
pub local_user: LocalUserSettings,
pub language: Language,
}

View file

@ -48,10 +48,10 @@ impl ViewToVec for AdminPurgeCommunityView {
type DbTuple = AdminPurgeCommunityViewTuple;
fn from_tuple_to_vec(items: Vec<Self::DbTuple>) -> Vec<Self> {
items
.iter()
.into_iter()
.map(|a| Self {
admin_purge_community: a.0.to_owned(),
admin: a.1.to_owned(),
admin_purge_community: a.0,
admin: a.1,
})
.collect::<Vec<Self>>()
}