From 97b7120ff8605c1dcbf9a1cc294da2de7d2d9571 Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Mon, 6 Mar 2023 04:07:46 -0500 Subject: [PATCH] move another storyteller-web query: ban user --- .../src/queries/users/user/mod.rs | 1 + .../queries/users/user/set_user_ban_status.rs | 39 +++++++++++++++++++ .../moderation/ip_bans/add_ip_ban.rs | 2 +- .../moderation/user_bans/ban_user.rs | 39 ++++++------------- 4 files changed, 53 insertions(+), 28 deletions(-) create mode 100644 crates/lib/database_queries/src/queries/users/user/set_user_ban_status.rs diff --git a/crates/lib/database_queries/src/queries/users/user/mod.rs b/crates/lib/database_queries/src/queries/users/user/mod.rs index 6e1693587a..715b399162 100644 --- a/crates/lib/database_queries/src/queries/users/user/mod.rs +++ b/crates/lib/database_queries/src/queries/users/user/mod.rs @@ -3,4 +3,5 @@ pub mod list_users_query_builder; pub mod lookup_user_for_login_by_email; pub mod lookup_user_for_login_by_username; pub mod lookup_user_for_login_result; +pub mod set_user_ban_status; pub mod update_user_record_with_new_stripe_customer_id; diff --git a/crates/lib/database_queries/src/queries/users/user/set_user_ban_status.rs b/crates/lib/database_queries/src/queries/users/user/set_user_ban_status.rs new file mode 100644 index 0000000000..f4c95848a3 --- /dev/null +++ b/crates/lib/database_queries/src/queries/users/user/set_user_ban_status.rs @@ -0,0 +1,39 @@ +use anyhow::anyhow; +use sqlx::MySqlPool; +use container_common::anyhow_result::AnyhowResult; +use tokens::users::user::UserToken; + +pub struct SetUserBanStatsArgs<'a> { + pub subject_user_token: &'a UserToken, + pub is_banned: bool, + pub mod_user_token: &'a UserToken, + pub maybe_mod_comments: Option<&'a str>, + pub mysql_pool: &'a MySqlPool, +} + +pub async fn set_user_ban_status(args: SetUserBanStatsArgs<'_>) -> AnyhowResult<()> { + let query_result = sqlx::query!( + r#" +UPDATE users +SET + is_banned = ?, + maybe_mod_comments = ?, + maybe_mod_user_token = ?, + version = version + 1 + +WHERE users.token = ? +LIMIT 1 + "#, + args.is_banned, + args.maybe_mod_comments, + args.mod_user_token, + args.subject_user_token, + ) + .execute(args.mysql_pool) + .await; + + match query_result { + Ok(_) => Ok(()), + Err(err) => Err(anyhow!("error with query: {:?}", err)), + } +} diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/ip_bans/add_ip_ban.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/ip_bans/add_ip_ban.rs index bd3bea4c4c..a1938de01e 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/ip_bans/add_ip_ban.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/ip_bans/add_ip_ban.rs @@ -9,6 +9,7 @@ use crate::http_server::web_utils::response_error_helpers::to_simple_json_error; use crate::http_server::web_utils::response_success_helpers::simple_json_success; use crate::server_state::ServerState; use crate::validations::model_uploads::validate_model_title; +use database_queries::queries::ip_bans::upsert_ip_ban::{upsert_ip_ban, UpsertIpBanArgs}; use log::{info, warn, log}; use regex::Regex; use sqlx::error::DatabaseError; @@ -16,7 +17,6 @@ use sqlx::error::Error::Database; use sqlx::mysql::MySqlDatabaseError; use std::fmt; use std::sync::Arc; -use database_queries::queries::ip_bans::upsert_ip_ban::{upsert_ip_ban, UpsertIpBanArgs}; use user_input_common::validate_user_provided_ip_address::validate_user_provided_ip_address; #[derive(Deserialize)] diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_bans/ban_user.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_bans/ban_user.rs index 8d8724f1d6..f18b17ebf6 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_bans/ban_user.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_bans/ban_user.rs @@ -9,6 +9,7 @@ use crate::http_server::web_utils::response_error_helpers::to_simple_json_error; use crate::http_server::web_utils::response_success_helpers::simple_json_success; use crate::http_server::web_utils::serialize_as_json_error::serialize_as_json_error; use crate::server_state::ServerState; +use database_queries::queries::users::user::set_user_ban_status::{set_user_ban_status, SetUserBanStatsArgs}; use database_queries::queries::users::user_profiles::get_user_profile_by_username::get_user_profile_by_username; use log::{info, warn, log}; use regex::Regex; @@ -131,33 +132,17 @@ pub async fn ban_user_handler( } }; - let query_result = sqlx::query!( - r#" -UPDATE users -SET - is_banned = ?, - maybe_mod_comments = ?, - maybe_mod_user_token = ?, - version = version + 1 - -WHERE users.token = ? -LIMIT 1 - "#, - &request.is_banned, - &request.mod_notes, - &user_session.user_token, - &user_profile.user_token - ) - .execute(&server_state.mysql_pool) - .await; - - match query_result { - Ok(_) => {}, - Err(err) => { - warn!("Add IP ban DB error: {:?}", err); - return Err(BanUserErrorResponse::server_error()); - } - }; + set_user_ban_status(SetUserBanStatsArgs { + subject_user_token: &user_profile.user_token, + is_banned: request.is_banned, + mod_user_token: &user_session.user_token_typed, + maybe_mod_comments: Some(&request.mod_notes), + mysql_pool: &server_state.mysql_pool, + }).await + .map_err(|err| { + warn!("Add IP ban DB error: {:?}", err); + BanUserErrorResponse::server_error() + })?; Ok(simple_json_success()) }