]> Untitled Git - lemmy.git/commitdiff
api changes for comment language tagging
authorFelix Ableitner <me@nutomic.com>
Tue, 23 Aug 2022 21:40:56 +0000 (23:40 +0200)
committerDessalines <dessalines@users.noreply.github.com>
Fri, 2 Sep 2022 14:49:54 +0000 (10:49 -0400)
crates/api_common/src/comment.rs
crates/api_crud/src/comment/create.rs
crates/api_crud/src/comment/update.rs
crates/api_crud/src/post/create.rs
crates/api_crud/src/post/update.rs
crates/db_schema/src/impls/comment.rs
scripts/test.sh

index df3ddbafacbe7a31537b0d55adc315046eeba7b4..ea83f8aa1fa4df4553f4c523dacabed3af302111 100644 (file)
@@ -1,6 +1,6 @@
 use crate::sensitive::Sensitive;
 use lemmy_db_schema::{
-  newtypes::{CommentId, CommentReportId, CommunityId, LocalUserId, PostId},
+  newtypes::{CommentId, CommentReportId, CommunityId, LanguageId, LocalUserId, PostId},
   CommentSortType,
   ListingType,
 };
@@ -12,6 +12,7 @@ pub struct CreateComment {
   pub content: String,
   pub post_id: PostId,
   pub parent_id: Option<CommentId>,
+  pub language_id: Option<LanguageId>,
   pub form_id: Option<String>,
   pub auth: Sensitive<String>,
 }
@@ -27,6 +28,7 @@ pub struct EditComment {
   pub comment_id: CommentId,
   pub content: Option<String>,
   pub distinguished: Option<bool>,
+  pub language_id: Option<LanguageId>,
   pub form_id: Option<String>,
   pub auth: Sensitive<String>,
 }
index c6b38612d085e6314e9b0eef943609fcfbcd725c..73408fa9881138a675d6f4f78995834ed7ffa8ed 100644 (file)
@@ -84,10 +84,18 @@ impl PerformCrud for CreateComment {
       }
     }
 
+    // if no language is set, copy language from parent post/comment
+    let parent_language = parent_opt
+      .as_ref()
+      .map(|p| p.language_id)
+      .unwrap_or(post.language_id);
+    let language_id = Some(data.language_id.unwrap_or(parent_language));
+
     let comment_form = CommentForm {
       content: content_slurs_removed,
       post_id: data.post_id,
       creator_id: local_user_view.person.id,
+      language_id,
       ..CommentForm::default()
     };
 
index 4939d5abdf2256e2686162564bfcd3b6e27427eb..3a56a23ddb556f3bbb820cfd20c0c6bb90686b11 100644 (file)
@@ -14,7 +14,10 @@ use lemmy_apub::protocol::activities::{
   create_or_update::comment::CreateOrUpdateComment,
   CreateOrUpdateType,
 };
-use lemmy_db_schema::source::comment::Comment;
+use lemmy_db_schema::{
+  source::comment::{Comment, CommentForm},
+  traits::Crud,
+};
 use lemmy_db_views::structs::CommentView;
 use lemmy_utils::{
   error::LemmyError,
@@ -48,7 +51,6 @@ impl PerformCrud for EditComment {
       CommentView::read(conn, comment_id, None)
     })
     .await??;
-    let mut updated_comment = orig_comment.comment.clone();
 
     // TODO is this necessary? It should really only need to check on create
     check_community_ban(
@@ -65,7 +67,7 @@ impl PerformCrud for EditComment {
       return Err(LemmyError::from_message("no_comment_edit_allowed"));
     }
 
-    if let Some(distinguished) = data.distinguished {
+    if data.distinguished.is_some() {
       // Verify that only a mod or admin can distinguish a comment
       is_mod_or_admin(
         context.pool(),
@@ -73,24 +75,27 @@ impl PerformCrud for EditComment {
         orig_comment.community.id,
       )
       .await?;
-
-      updated_comment = blocking(context.pool(), move |conn| {
-        Comment::update_distinguished(conn, comment_id, distinguished)
-      })
-      .await?
-      .map_err(|e| LemmyError::from_error_message(e, "couldnt_update_comment"))?;
     }
 
     // Update the Content
-    if let Some(content) = &data.content {
-      let content_slurs_removed = remove_slurs(content, &context.settings().slur_regex());
-      let comment_id = data.comment_id;
-      updated_comment = blocking(context.pool(), move |conn| {
-        Comment::update_content(conn, comment_id, &content_slurs_removed)
-      })
-      .await?
-      .map_err(|e| LemmyError::from_error_message(e, "couldnt_update_comment"))?;
+    let content_slurs_removed = data
+      .content
+      .as_ref()
+      .map(|c| remove_slurs(&c, &context.settings().slur_regex()));
+    let comment_id = data.comment_id;
+    let form = CommentForm {
+      creator_id: orig_comment.comment.creator_id,
+      post_id: orig_comment.comment.post_id,
+      content: content_slurs_removed.unwrap_or(orig_comment.comment.content),
+      distinguished: data.distinguished,
+      language_id: data.language_id,
+      ..Default::default()
     };
+    let updated_comment = blocking(context.pool(), move |conn| {
+      Comment::update(conn, comment_id, &form)
+    })
+    .await?
+    .map_err(|e| LemmyError::from_error_message(e, "couldnt_update_comment"))?;
 
     // Do the mentions / recipients
     let updated_comment_content = updated_comment.content.to_owned();
index ef74ece866d7bf4c8e5d993c58dd8cdfd2a9da1d..64a2382736ef5bf61d1752d6c3da2bdcfbbba4f2 100644 (file)
@@ -90,7 +90,6 @@ impl PerformCrud for CreatePost {
     let (embed_title, embed_description, embed_video_url) = metadata_res
       .map(|u| (Some(u.title), Some(u.description), Some(u.embed_video_url)))
       .unwrap_or_default();
-
     let language_id = Some(
       data.language_id.unwrap_or(
         blocking(context.pool(), move |conn| {
index d96a12d5e3ff4b1cdf0c8180139b7e5adbbe926c..3cf36d30654c264027fcf6c226c69c0262a2aafd 100644 (file)
@@ -1,3 +1,4 @@
+use crate::PerformCrud;
 use actix_web::web::Data;
 use lemmy_api_common::{
   post::{EditPost, PostResponse},
@@ -14,10 +15,7 @@ use lemmy_apub::protocol::activities::{
   CreateOrUpdateType,
 };
 use lemmy_db_schema::{
-  source::{
-    language::Language,
-    post::{Post, PostForm},
-  },
+  source::post::{Post, PostForm},
   traits::Crud,
   utils::{diesel_option_overwrite, naive_now},
 };
@@ -28,8 +26,6 @@ use lemmy_utils::{
 };
 use lemmy_websocket::{send::send_post_ws_message, LemmyContext, UserOperationCrud};
 
-use crate::PerformCrud;
-
 #[async_trait::async_trait(?Send)]
 impl PerformCrud for EditPost {
   type Response = PostResponse;
@@ -85,15 +81,6 @@ impl PerformCrud for EditPost {
       .map(|u| (Some(u.title), Some(u.description), Some(u.embed_video_url)))
       .unwrap_or_default();
 
-    let language_id = Some(
-      data.language_id.unwrap_or(
-        blocking(context.pool(), move |conn| {
-          Language::read_undetermined(conn)
-        })
-        .await??,
-      ),
-    );
-
     let post_form = PostForm {
       creator_id: orig_post.creator_id.to_owned(),
       community_id: orig_post.community_id,
@@ -105,7 +92,7 @@ impl PerformCrud for EditPost {
       embed_title,
       embed_description,
       embed_video_url,
-      language_id,
+      language_id: data.language_id,
       thumbnail_url: Some(thumbnail_url),
       ..PostForm::default()
     };
index 1a145809f294d678dd244c4e2c81582761722602..5eaedcb95fa66580e967db36f4d2654c57f63299 100644 (file)
@@ -75,28 +75,6 @@ impl Comment {
       .get_results::<Self>(conn)
   }
 
-  pub fn update_content(
-    conn: &PgConnection,
-    comment_id: CommentId,
-    new_content: &str,
-  ) -> Result<Self, Error> {
-    use crate::schema::comment::dsl::*;
-    diesel::update(comment.find(comment_id))
-      .set((content.eq(new_content), updated.eq(naive_now())))
-      .get_result::<Self>(conn)
-  }
-
-  pub fn update_distinguished(
-    conn: &PgConnection,
-    comment_id: CommentId,
-    new_distinguished: bool,
-  ) -> Result<Self, Error> {
-    use crate::schema::comment::dsl::*;
-    diesel::update(comment.find(comment_id))
-      .set((distinguished.eq(new_distinguished), updated.eq(naive_now())))
-      .get_result::<Self>(conn)
-  }
-
   pub fn create(
     conn: &PgConnection,
     comment_form: &CommentForm,
index 71a8b8eee9b351739f5ff14960479170337f4bf1..61a6ad4853337c5fd7d74f9d8fd3b1e862b22aae 100755 (executable)
@@ -9,5 +9,5 @@ export LEMMY_DATABASE_URL=postgres://lemmy:password@localhost:5432/lemmy
 # so to load the config we need to traverse to the repo root
 export LEMMY_CONFIG_LOCATION=../../config/config.hjson
 RUST_BACKTRACE=1 \
-  cargo test -p lemmy_db_views --no-fail-fast --all-features -- --nocapture
+  cargo test --workspace --no-fail-fast --all-features
 # Add this to do printlns: -- --nocapture