]> Untitled Git - lemmy.git/blobdiff - crates/api_crud/src/site/read.rs
implement language tags for site/community in db and api (#2434)
[lemmy.git] / crates / api_crud / src / site / read.rs
index f9fe75c73b1237bbbf246b3f985fbe86d62b44d9..fc3293a7dadf9e8689bc58ea293a84d7593595b3 100644 (file)
@@ -5,7 +5,8 @@ use lemmy_api_common::{
   site::{CreateSite, GetSite, GetSiteResponse, MyUserInfo},
   utils::{blocking, build_federated_instances, get_local_user_settings_view_from_jwt_opt},
 };
-use lemmy_db_views::structs::SiteView;
+use lemmy_db_schema::source::{actor_language::SiteLanguage, language::Language};
+use lemmy_db_views::structs::{LocalUserDiscussionLanguageView, SiteView};
 use lemmy_db_views_actor::structs::{
   CommunityBlockView,
   CommunityFollowerView,
@@ -13,7 +14,7 @@ use lemmy_db_views_actor::structs::{
   PersonBlockView,
   PersonViewSafe,
 };
-use lemmy_utils::{version, ConnectionId, LemmyError};
+use lemmy_utils::{error::LemmyError, version, ConnectionId};
 use lemmy_websocket::{messages::GetUsersOnline, LemmyContext};
 use tracing::info;
 
@@ -54,21 +55,8 @@ impl PerformCrud for GetSite {
 
           let create_site = CreateSite {
             name: setup.site_name.to_owned(),
-            sidebar: setup.sidebar.to_owned(),
-            description: setup.description.to_owned(),
-            icon: setup.icon.to_owned(),
-            banner: setup.banner.to_owned(),
-            enable_downvotes: setup.enable_downvotes,
-            open_registration: setup.open_registration,
-            enable_nsfw: setup.enable_nsfw,
-            community_creation_admin_only: setup.community_creation_admin_only,
-            require_email_verification: setup.require_email_verification,
-            require_application: setup.require_application,
-            application_question: setup.application_question.to_owned(),
-            private_instance: setup.private_instance,
-            default_theme: setup.default_theme.to_owned(),
-            default_post_listing_type: setup.default_post_listing_type.to_owned(),
             auth: admin_jwt,
+            ..CreateSite::default()
           };
           create_site.perform(context, websocket_id).await?;
           info!("Site {} created", setup.site_name);
@@ -96,6 +84,8 @@ impl PerformCrud for GetSite {
     .await?
     {
       let person_id = local_user_view.person.id;
+      let local_user_id = local_user_view.local_user.id;
+
       let follows = blocking(context.pool(), move |conn| {
         CommunityFollowerView::for_person(conn, person_id)
       })
@@ -122,19 +112,28 @@ impl PerformCrud for GetSite {
       .await?
       .map_err(|e| LemmyError::from_error_message(e, "system_err_login"))?;
 
+      let discussion_languages = blocking(context.pool(), move |conn| {
+        LocalUserDiscussionLanguageView::read_languages(conn, local_user_id)
+      })
+      .await?
+      .map_err(|e| LemmyError::from_error_message(e, "system_err_login"))?;
+
       Some(MyUserInfo {
         local_user_view,
         follows,
         moderates,
         community_blocks,
         person_blocks,
+        discussion_languages,
       })
     } else {
       None
     };
 
-    let federated_instances =
-      build_federated_instances(context.pool(), &context.settings()).await?;
+    let federated_instances = build_federated_instances(context.pool(), context.settings()).await?;
+
+    let all_languages = blocking(context.pool(), Language::read_all).await??;
+    let discussion_languages = blocking(context.pool(), SiteLanguage::read_local).await??;
 
     Ok(GetSiteResponse {
       site_view,
@@ -143,6 +142,8 @@ impl PerformCrud for GetSite {
       version: version::VERSION.to_string(),
       my_user,
       federated_instances,
+      all_languages,
+      discussion_languages,
     })
   }
 }