From d058e2217a458abe5bdeb11be14b5f4723329d8a Mon Sep 17 00:00:00 2001 From: Felix Ableitner Date: Tue, 23 Aug 2022 23:40:56 +0200 Subject: [PATCH] api changes for comment language tagging --- crates/api_common/src/comment.rs | 4 ++- crates/api_crud/src/comment/create.rs | 8 ++++++ crates/api_crud/src/comment/update.rs | 39 +++++++++++++++------------ crates/api_crud/src/post/create.rs | 1 - crates/api_crud/src/post/update.rs | 19 +++---------- crates/db_schema/src/impls/comment.rs | 22 --------------- scripts/test.sh | 2 +- 7 files changed, 37 insertions(+), 58 deletions(-) diff --git a/crates/api_common/src/comment.rs b/crates/api_common/src/comment.rs index df3ddbafa..ea83f8aa1 100644 --- a/crates/api_common/src/comment.rs +++ b/crates/api_common/src/comment.rs @@ -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, + pub language_id: Option, pub form_id: Option, pub auth: Sensitive, } @@ -27,6 +28,7 @@ pub struct EditComment { pub comment_id: CommentId, pub content: Option, pub distinguished: Option, + pub language_id: Option, pub form_id: Option, pub auth: Sensitive, } diff --git a/crates/api_crud/src/comment/create.rs b/crates/api_crud/src/comment/create.rs index c6b38612d..73408fa98 100644 --- a/crates/api_crud/src/comment/create.rs +++ b/crates/api_crud/src/comment/create.rs @@ -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() }; diff --git a/crates/api_crud/src/comment/update.rs b/crates/api_crud/src/comment/update.rs index 4939d5abd..3a56a23dd 100644 --- a/crates/api_crud/src/comment/update.rs +++ b/crates/api_crud/src/comment/update.rs @@ -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(); diff --git a/crates/api_crud/src/post/create.rs b/crates/api_crud/src/post/create.rs index ef74ece86..64a238273 100644 --- a/crates/api_crud/src/post/create.rs +++ b/crates/api_crud/src/post/create.rs @@ -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| { diff --git a/crates/api_crud/src/post/update.rs b/crates/api_crud/src/post/update.rs index d96a12d5e..3cf36d306 100644 --- a/crates/api_crud/src/post/update.rs +++ b/crates/api_crud/src/post/update.rs @@ -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() }; diff --git a/crates/db_schema/src/impls/comment.rs b/crates/db_schema/src/impls/comment.rs index 1a145809f..5eaedcb95 100644 --- a/crates/db_schema/src/impls/comment.rs +++ b/crates/db_schema/src/impls/comment.rs @@ -75,28 +75,6 @@ impl Comment { .get_results::(conn) } - pub fn update_content( - conn: &PgConnection, - comment_id: CommentId, - new_content: &str, - ) -> Result { - use crate::schema::comment::dsl::*; - diesel::update(comment.find(comment_id)) - .set((content.eq(new_content), updated.eq(naive_now()))) - .get_result::(conn) - } - - pub fn update_distinguished( - conn: &PgConnection, - comment_id: CommentId, - new_distinguished: bool, - ) -> Result { - use crate::schema::comment::dsl::*; - diesel::update(comment.find(comment_id)) - .set((distinguished.eq(new_distinguished), updated.eq(naive_now()))) - .get_result::(conn) - } - pub fn create( conn: &PgConnection, comment_form: &CommentForm, diff --git a/scripts/test.sh b/scripts/test.sh index 71a8b8eee..61a6ad485 100755 --- a/scripts/test.sh +++ b/scripts/test.sh @@ -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