1 use activitypub_federation::config::Data;
2 use actix_web::web::Json;
3 use lemmy_api_common::{
4 build_response::build_community_response,
5 community::{CommunityResponse, HideCommunity},
7 send_activity::{ActivityChannel, SendActivityData},
8 utils::{is_admin, local_user_view_from_jwt, sanitize_html_opt},
10 use lemmy_db_schema::{
12 community::{Community, CommunityUpdateForm},
13 moderator::{ModHideCommunity, ModHideCommunityForm},
17 use lemmy_utils::error::{LemmyError, LemmyErrorExt, LemmyErrorType};
19 #[tracing::instrument(skip(context))]
20 pub async fn hide_community(
21 data: Json<HideCommunity>,
22 context: Data<LemmyContext>,
23 ) -> Result<Json<CommunityResponse>, LemmyError> {
24 // Verify its a admin (only admin can hide or unhide it)
25 let local_user_view = local_user_view_from_jwt(&data.auth, &context).await?;
26 is_admin(&local_user_view)?;
28 let community_form = CommunityUpdateForm {
29 hidden: Some(data.hidden),
33 let mod_hide_community_form = ModHideCommunityForm {
34 community_id: data.community_id,
35 mod_person_id: local_user_view.person.id,
36 reason: sanitize_html_opt(&data.reason),
37 hidden: Some(data.hidden),
40 let community_id = data.community_id;
41 let community = Community::update(&mut context.pool(), community_id, &community_form)
43 .with_lemmy_type(LemmyErrorType::CouldntUpdateCommunityHiddenStatus)?;
45 ModHideCommunity::create(&mut context.pool(), &mod_hide_community_form).await?;
47 ActivityChannel::submit_activity(
48 SendActivityData::UpdateCommunity(local_user_view.person.clone(), community),
53 build_community_response(&context, local_user_view, community_id).await