From: Dessalines Date: Tue, 23 Nov 2021 15:53:48 +0000 (-0500) Subject: Adding a GetComment endpoint. Fixes #1919 (#1944) X-Git-Url: http://these/git/%7B%24%7B%60data:application/%22%7Burl%7D/%7BpictshareAvatarThumbnail%28?a=commitdiff_plain;h=d2e28e5f3836bf1bee1dabc09d14ec79b2e40858;p=lemmy.git Adding a GetComment endpoint. Fixes #1919 (#1944) --- diff --git a/crates/api_common/src/comment.rs b/crates/api_common/src/comment.rs index eadbceb2..afe76a99 100644 --- a/crates/api_common/src/comment.rs +++ b/crates/api_common/src/comment.rs @@ -11,6 +11,12 @@ pub struct CreateComment { pub auth: String, } +#[derive(Serialize, Deserialize)] +pub struct GetComment { + pub id: CommentId, + pub auth: Option, +} + #[derive(Serialize, Deserialize)] pub struct EditComment { pub content: String, diff --git a/crates/api_crud/src/comment/read.rs b/crates/api_crud/src/comment/read.rs index 4cd42bb9..4789b84f 100644 --- a/crates/api_crud/src/comment/read.rs +++ b/crates/api_crud/src/comment/read.rs @@ -12,10 +12,39 @@ use lemmy_db_schema::{ ListingType, SortType, }; -use lemmy_db_views::comment_view::CommentQueryBuilder; +use lemmy_db_views::comment_view::{CommentQueryBuilder, CommentView}; use lemmy_utils::{ApiError, ConnectionId, LemmyError}; use lemmy_websocket::LemmyContext; +#[async_trait::async_trait(?Send)] +impl PerformCrud for GetComment { + type Response = CommentResponse; + + async fn perform( + &self, + context: &Data, + _websocket_id: Option, + ) -> Result { + let data = self; + let local_user_view = + get_local_user_view_from_jwt_opt(&data.auth, context.pool(), context.secret()).await?; + + let person_id = local_user_view.map(|u| u.person.id); + let id = data.id; + let comment_view = blocking(context.pool(), move |conn| { + CommentView::read(conn, id, person_id) + }) + .await? + .map_err(|e| ApiError::err("couldnt_find_comment", e))?; + + Ok(Self::Response { + comment_view, + form_id: None, + recipient_ids: Vec::new(), + }) + } +} + #[async_trait::async_trait(?Send)] impl PerformCrud for GetComments { type Response = GetCommentsResponse; diff --git a/crates/api_crud/src/lib.rs b/crates/api_crud/src/lib.rs index f77632f9..9f1553ee 100644 --- a/crates/api_crud/src/lib.rs +++ b/crates/api_crud/src/lib.rs @@ -108,6 +108,9 @@ pub async fn match_websocket_operation_crud( UserOperationCrud::RemoveComment => { do_websocket_operation::(context, id, op, data).await } + UserOperationCrud::GetComment => { + do_websocket_operation::(context, id, op, data).await + } UserOperationCrud::GetComments => { do_websocket_operation::(context, id, op, data).await } diff --git a/crates/websocket/src/lib.rs b/crates/websocket/src/lib.rs index 251c7072..f422ac51 100644 --- a/crates/websocket/src/lib.rs +++ b/crates/websocket/src/lib.rs @@ -169,6 +169,7 @@ pub enum UserOperationCrud { RemovePost, // Comment CreateComment, + GetComment, GetComments, EditComment, DeleteComment, diff --git a/src/api_routes.rs b/src/api_routes.rs index a6a84039..9f06c5be 100644 --- a/src/api_routes.rs +++ b/src/api_routes.rs @@ -115,6 +115,7 @@ pub fn config(cfg: &mut web::ServiceConfig, rate_limit: &RateLimit) { .service( web::scope("/comment") .wrap(rate_limit.message()) + .route("", web::get().to(route_get_crud::)) .route("", web::put().to(route_post_crud::)) .route("/delete", web::post().to(route_post_crud::)) .route("/remove", web::post().to(route_post_crud::))