]> Untitled Git - lemmy.git/blobdiff - crates/api/src/local_user/block.rs
Diesel 2.0.0 upgrade (#2452)
[lemmy.git] / crates / api / src / local_user / block.rs
index 5dc68dddc1bf5a2e8ae1c21d14e22e23b9c93fe0..3f1b36f239a52f952912c4e82a41d86c344adbc0 100644 (file)
@@ -1,16 +1,15 @@
 use crate::Perform;
 use actix_web::web::Data;
 use lemmy_api_common::{
-  blocking,
-  get_local_user_view_from_jwt,
   person::{BlockPerson, BlockPersonResponse},
+  utils::{blocking, get_local_user_view_from_jwt},
 };
 use lemmy_db_schema::{
   source::person_block::{PersonBlock, PersonBlockForm},
   traits::Blockable,
 };
-use lemmy_db_views_actor::person_view::PersonViewSafe;
-use lemmy_utils::{ConnectionId, LemmyError};
+use lemmy_db_views_actor::structs::PersonViewSafe;
+use lemmy_utils::{error::LemmyError, ConnectionId};
 use lemmy_websocket::LemmyContext;
 
 #[async_trait::async_trait(?Send)]
@@ -40,25 +39,29 @@ impl Perform for BlockPerson {
       target_id,
     };
 
+    let target_person_view = blocking(context.pool(), move |conn| {
+      PersonViewSafe::read(conn, target_id)
+    })
+    .await??;
+
+    if target_person_view.person.admin {
+      return Err(LemmyError::from_message("cant_block_admin"));
+    }
+
     if data.block {
-      let block = move |conn: &'_ _| PersonBlock::block(conn, &person_block_form);
+      let block = move |conn: &mut _| PersonBlock::block(conn, &person_block_form);
       blocking(context.pool(), block)
         .await?
         .map_err(|e| LemmyError::from_error_message(e, "person_block_already_exists"))?;
     } else {
-      let unblock = move |conn: &'_ _| PersonBlock::unblock(conn, &person_block_form);
+      let unblock = move |conn: &mut _| PersonBlock::unblock(conn, &person_block_form);
       blocking(context.pool(), unblock)
         .await?
         .map_err(|e| LemmyError::from_error_message(e, "person_block_already_exists"))?;
     }
 
-    let person_view = blocking(context.pool(), move |conn| {
-      PersonViewSafe::read(conn, target_id)
-    })
-    .await??;
-
     let res = BlockPersonResponse {
-      person_view,
+      person_view: target_person_view,
       blocked: data.block,
     };