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<LemmyContext>,
+ _websocket_id: Option<ConnectionId>,
+ ) -> Result<Self::Response, LemmyError> {
+ 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;
UserOperationCrud::RemoveComment => {
do_websocket_operation::<RemoveComment>(context, id, op, data).await
}
+ UserOperationCrud::GetComment => {
+ do_websocket_operation::<GetComment>(context, id, op, data).await
+ }
UserOperationCrud::GetComments => {
do_websocket_operation::<GetComments>(context, id, op, data).await
}
.service(
web::scope("/comment")
.wrap(rate_limit.message())
+ .route("", web::get().to(route_get_crud::<GetComment>))
.route("", web::put().to(route_post_crud::<EditComment>))
.route("/delete", web::post().to(route_post_crud::<DeleteComment>))
.route("/remove", web::post().to(route_post_crud::<RemoveComment>))