2 use actix_web::web::Data;
3 use lemmy_api_common::{
4 comment::{CommentReportResponse, ResolveCommentReport},
6 utils::{is_mod_or_admin, local_user_view_from_jwt},
8 use lemmy_db_schema::{source::comment_report::CommentReport, traits::Reportable};
9 use lemmy_db_views::structs::CommentReportView;
10 use lemmy_utils::error::{LemmyError, LemmyErrorExt, LemmyErrorType};
12 /// Resolves or unresolves a comment report and notifies the moderators of the community
13 #[async_trait::async_trait(?Send)]
14 impl Perform for ResolveCommentReport {
15 type Response = CommentReportResponse;
17 #[tracing::instrument(skip(context))]
20 context: &Data<LemmyContext>,
21 ) -> Result<CommentReportResponse, LemmyError> {
22 let data: &ResolveCommentReport = self;
23 let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
25 let report_id = data.report_id;
26 let person_id = local_user_view.person.id;
27 let report = CommentReportView::read(context.pool(), report_id, person_id).await?;
29 let person_id = local_user_view.person.id;
30 is_mod_or_admin(context.pool(), person_id, report.community.id).await?;
33 CommentReport::resolve(context.pool(), report_id, person_id)
35 .with_lemmy_type(LemmyErrorType::CouldntResolveReport)?;
37 CommentReport::unresolve(context.pool(), report_id, person_id)
39 .with_lemmy_type(LemmyErrorType::CouldntResolveReport)?;
42 let report_id = data.report_id;
43 let comment_report_view = CommentReportView::read(context.pool(), report_id, person_id).await?;
45 Ok(CommentReportResponse {