X-Git-Url: http://these/git/?a=blobdiff_plain;f=crates%2Fapi%2Fsrc%2Fcommunity%2Fhide.rs;h=4c05a71cfdc9dc73245d9f96fa2566c3b4741d3d;hb=3471f3533cb724b2cf6953d563aadfcc9f66c1d2;hp=a3910010024b53e130cb341364bd28c367169519;hpb=7058cfa1cf67e65818e8ce62d9716b1564558734;p=lemmy.git diff --git a/crates/api/src/community/hide.rs b/crates/api/src/community/hide.rs index a3910010..4c05a71c 100644 --- a/crates/api/src/community/hide.rs +++ b/crates/api/src/community/hide.rs @@ -1,82 +1,50 @@ use crate::Perform; use actix_web::web::Data; use lemmy_api_common::{ - blocking, + build_response::build_community_response, community::{CommunityResponse, HideCommunity}, - get_local_user_view_from_jwt, - is_admin, + context::LemmyContext, + utils::{is_admin, local_user_view_from_jwt, sanitize_html_opt}, }; -use lemmy_apub::protocol::activities::community::update::UpdateCommunity; use lemmy_db_schema::{ - naive_now, source::{ - community::{Community, CommunityForm}, + community::{Community, CommunityUpdateForm}, moderator::{ModHideCommunity, ModHideCommunityForm}, }, traits::Crud, }; -use lemmy_utils::{ConnectionId, LemmyError}; -use lemmy_websocket::{send::send_community_ws_message, LemmyContext, UserOperationCrud}; +use lemmy_utils::error::{LemmyError, LemmyErrorExt, LemmyErrorType}; #[async_trait::async_trait(?Send)] impl Perform for HideCommunity { type Response = CommunityResponse; - #[tracing::instrument(skip(context, websocket_id))] - async fn perform( - &self, - context: &Data, - websocket_id: Option, - ) -> Result { + #[tracing::instrument(skip(context))] + async fn perform(&self, context: &Data) -> Result { let data: &HideCommunity = self; // Verify its a admin (only admin can hide or unhide it) - let local_user_view = - get_local_user_view_from_jwt(&data.auth, context.pool(), context.secret()).await?; + let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; is_admin(&local_user_view)?; - let community_id = data.community_id; - let read_community = blocking(context.pool(), move |conn| { - Community::read(conn, community_id) - }) - .await??; - - let community_form = CommunityForm { - name: read_community.name, - title: read_community.title, - description: read_community.description.to_owned(), - hidden: Some(data.hidden), - updated: Some(naive_now()), - ..CommunityForm::default() - }; + let community_form = CommunityUpdateForm::builder() + .hidden(Some(data.hidden)) + .build(); let mod_hide_community_form = ModHideCommunityForm { community_id: data.community_id, mod_person_id: local_user_view.person.id, - reason: data.reason.clone(), + reason: sanitize_html_opt(&data.reason), hidden: Some(data.hidden), }; let community_id = data.community_id; - let updated_community = blocking(context.pool(), move |conn| { - Community::update(conn, community_id, &community_form) - }) - .await? - .map_err(|e| LemmyError::from_error_message(e, "couldnt_update_community_hidden_status"))?; - - blocking(context.pool(), move |conn| { - ModHideCommunity::create(conn, &mod_hide_community_form) - }) - .await??; + Community::update(&mut context.pool(), community_id, &community_form) + .await + .with_lemmy_type(LemmyErrorType::CouldntUpdateCommunityHiddenStatus)?; - UpdateCommunity::send( - updated_community.into(), - &local_user_view.person.into(), - context, - ) - .await?; + ModHideCommunity::create(&mut context.pool(), &mod_hide_community_form).await?; - let op = UserOperationCrud::EditCommunity; - send_community_ws_message(data.community_id, op, websocket_id, None, context).await + build_community_response(context, local_user_view, community_id).await } }