]> Untitled Git - lemmy.git/blob - crates/db_views/src/local_user_discussion_language_view.rs
5c88a2f58ecb41d990f7aea1c7e0d4f8db17a15f
[lemmy.git] / crates / db_views / src / local_user_discussion_language_view.rs
1 use crate::structs::LocalUserDiscussionLanguageView;
2 use diesel::{result::Error, ExpressionMethods, PgConnection, QueryDsl, RunQueryDsl};
3 use lemmy_db_schema::{
4   newtypes::LocalUserId,
5   schema::{language, local_user, local_user_language},
6   source::{
7     language::Language,
8     local_user::{LocalUser, LocalUserSettings},
9   },
10   traits::ToSafeSettings,
11 };
12
13 type LocalUserDiscussionLanguageViewTuple = (LocalUserSettings, Language);
14
15 impl LocalUserDiscussionLanguageView {
16   pub fn read_languages(
17     conn: &PgConnection,
18     local_user_id: LocalUserId,
19   ) -> Result<Vec<Language>, Error> {
20     let res = local_user_language::table
21       .inner_join(local_user::table)
22       .inner_join(language::table)
23       .select((
24         LocalUser::safe_settings_columns_tuple(),
25         language::all_columns,
26       ))
27       .filter(local_user::id.eq(local_user_id))
28       .load::<LocalUserDiscussionLanguageViewTuple>(conn)?;
29
30     Ok(res.into_iter().map(|a| a.1).collect::<Vec<Language>>())
31   }
32 }