move another storyteller-web query: ban user

This commit is contained in:
Brandon Thomas committed 2023-03-06 04:07:46 -05:00
1 parent 961c5cf43d
commit 97b7120ff8
4 files changed
+53 -28

No files matched your search

@@ -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;
@@ -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)),
}
}
@@ -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)]
@@ -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())
}