2 use actix_web::web::Data;
3 use lemmy_api_common::{
5 post::{PostReportResponse, ResolvePostReport},
6 utils::{is_mod_or_admin, local_user_view_from_jwt},
8 use lemmy_db_schema::{source::post_report::PostReport, traits::Reportable};
9 use lemmy_db_views::structs::PostReportView;
10 use lemmy_utils::error::{LemmyError, LemmyErrorExt, LemmyErrorType};
12 /// Resolves or unresolves a post report and notifies the moderators of the community
13 #[async_trait::async_trait(?Send)]
14 impl Perform for ResolvePostReport {
15 type Response = PostReportResponse;
17 #[tracing::instrument(skip(context))]
18 async fn perform(&self, context: &Data<LemmyContext>) -> Result<PostReportResponse, LemmyError> {
19 let data: &ResolvePostReport = self;
20 let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
22 let report_id = data.report_id;
23 let person_id = local_user_view.person.id;
24 let report = PostReportView::read(&mut context.pool(), report_id, person_id).await?;
26 let person_id = local_user_view.person.id;
27 is_mod_or_admin(&mut context.pool(), person_id, report.community.id).await?;
30 PostReport::resolve(&mut context.pool(), report_id, person_id)
32 .with_lemmy_type(LemmyErrorType::CouldntResolveReport)?;
34 PostReport::unresolve(&mut context.pool(), report_id, person_id)
36 .with_lemmy_type(LemmyErrorType::CouldntResolveReport)?;
39 let post_report_view = PostReportView::read(&mut context.pool(), report_id, person_id).await?;
41 Ok(PostReportResponse { post_report_view })