Adding a GetComment endpoint. Fixes #1919

This commit is contained in:
Dessalines 2021-11-22 20:46:27 -05:00
parent 3e062a9959
commit 80029e4557
5 changed files with 41 additions and 1 deletions

View file

@ -11,6 +11,12 @@ pub struct CreateComment {
pub auth: String, pub auth: String,
} }
#[derive(Serialize, Deserialize)]
pub struct GetComment {
pub id: CommentId,
pub auth: Option<String>,
}
#[derive(Serialize, Deserialize)] #[derive(Serialize, Deserialize)]
pub struct EditComment { pub struct EditComment {
pub content: String, pub content: String,

View file

@ -12,10 +12,39 @@ use lemmy_db_schema::{
ListingType, ListingType,
SortType, SortType,
}; };
use lemmy_db_views::comment_view::CommentQueryBuilder; use lemmy_db_views::comment_view::{CommentQueryBuilder, CommentView};
use lemmy_utils::{ApiError, ConnectionId, LemmyError}; use lemmy_utils::{ApiError, ConnectionId, LemmyError};
use lemmy_websocket::LemmyContext; 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)] #[async_trait::async_trait(?Send)]
impl PerformCrud for GetComments { impl PerformCrud for GetComments {
type Response = GetCommentsResponse; type Response = GetCommentsResponse;

View file

@ -108,6 +108,9 @@ pub async fn match_websocket_operation_crud(
UserOperationCrud::RemoveComment => { UserOperationCrud::RemoveComment => {
do_websocket_operation::<RemoveComment>(context, id, op, data).await do_websocket_operation::<RemoveComment>(context, id, op, data).await
} }
UserOperationCrud::GetComment => {
do_websocket_operation::<GetComment>(context, id, op, data).await
}
UserOperationCrud::GetComments => { UserOperationCrud::GetComments => {
do_websocket_operation::<GetComments>(context, id, op, data).await do_websocket_operation::<GetComments>(context, id, op, data).await
} }

View file

@ -168,6 +168,7 @@ pub enum UserOperationCrud {
RemovePost, RemovePost,
// Comment // Comment
CreateComment, CreateComment,
GetComment,
GetComments, GetComments,
EditComment, EditComment,
DeleteComment, DeleteComment,

View file

@ -111,6 +111,7 @@ pub fn config(cfg: &mut web::ServiceConfig, rate_limit: &RateLimit) {
.service( .service(
web::scope("/comment") web::scope("/comment")
.wrap(rate_limit.message()) .wrap(rate_limit.message())
.route("", web::get().to(route_get_crud::<GetComment>))
.route("", web::put().to(route_post_crud::<EditComment>)) .route("", web::put().to(route_post_crud::<EditComment>))
.route("/delete", web::post().to(route_post_crud::<DeleteComment>)) .route("/delete", web::post().to(route_post_crud::<DeleteComment>))
.route("/remove", web::post().to(route_post_crud::<RemoveComment>)) .route("/remove", web::post().to(route_post_crud::<RemoveComment>))