mirror of
https://github.com/storytold/artcraft.git
synced 2026-11-14 05:42:32 +00:00
model deletion improvement for tts results
This commit is contained in:
1 parent
5586abe7a2
commit
a875e138eb
3 files changed
+135
-113
No files matched your search
@@ -0,0 +1,88 @@
|
||||
use crate::util::anyhow_result::AnyhowResult;
|
||||
use sqlx::MySqlPool;
|
||||
|
||||
pub async fn delete_tts_inference_result_as_user(
|
||||
inference_result_token: &str,
|
||||
mysql_pool: &MySqlPool
|
||||
) -> AnyhowResult<()> {
|
||||
let _r = sqlx::query!(
|
||||
r#"
|
||||
UPDATE tts_results
|
||||
SET
|
||||
user_deleted_at = CURRENT_TIMESTAMP
|
||||
WHERE
|
||||
token = ?
|
||||
LIMIT 1
|
||||
"#,
|
||||
inference_result_token,
|
||||
)
|
||||
.execute(mysql_pool)
|
||||
.await?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub async fn delete_tts_inference_result_as_mod(
|
||||
inference_result_token: &str,
|
||||
mod_user_token: &str,
|
||||
mysql_pool: &MySqlPool
|
||||
) -> AnyhowResult<()> {
|
||||
let _r = sqlx::query!(
|
||||
r#"
|
||||
UPDATE tts_results
|
||||
SET
|
||||
mod_deleted_at = CURRENT_TIMESTAMP,
|
||||
maybe_mod_user_token = ?
|
||||
WHERE
|
||||
token = ?
|
||||
LIMIT 1
|
||||
"#,
|
||||
mod_user_token,
|
||||
inference_result_token,
|
||||
)
|
||||
.execute(mysql_pool)
|
||||
.await?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub async fn undelete_tts_inference_result_as_user(
|
||||
inference_result_token: &str,
|
||||
mysql_pool: &MySqlPool
|
||||
) -> AnyhowResult<()> {
|
||||
let _r = sqlx::query!(
|
||||
r#"
|
||||
UPDATE tts_results
|
||||
SET
|
||||
user_deleted_at = NULL
|
||||
WHERE
|
||||
token = ?
|
||||
LIMIT 1
|
||||
"#,
|
||||
inference_result_token,
|
||||
)
|
||||
.execute(mysql_pool)
|
||||
.await?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub async fn undelete_tts_inference_result_as_mod(
|
||||
inference_result_token: &str,
|
||||
mod_user_token: &str,
|
||||
mysql_pool: &MySqlPool
|
||||
) -> AnyhowResult<()> {
|
||||
let _r = sqlx::query!(
|
||||
r#"
|
||||
UPDATE tts_results
|
||||
SET
|
||||
mod_deleted_at = NULL,
|
||||
maybe_mod_user_token = ?
|
||||
WHERE
|
||||
token = ?
|
||||
LIMIT 1
|
||||
"#,
|
||||
mod_user_token,
|
||||
inference_result_token,
|
||||
)
|
||||
.execute(mysql_pool)
|
||||
.await?;
|
||||
Ok(())
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
pub mod badges;
|
||||
pub mod create_session;
|
||||
pub mod delete_tts_model;
|
||||
pub mod delete_tts_result;
|
||||
pub mod delete_w2l_result;
|
||||
pub mod delete_w2l_template;
|
||||
pub mod list_ip_bans;
|
||||
|
||||
@@ -6,11 +6,17 @@ use actix_web::error::ResponseError;
|
||||
use actix_web::http::StatusCode;
|
||||
use actix_web::web::Path;
|
||||
use actix_web::{Responder, web, HttpResponse, error, HttpRequest};
|
||||
use crate::database::queries::delete_tts_result::delete_tts_inference_result_as_mod;
|
||||
use crate::database::queries::delete_tts_result::delete_tts_inference_result_as_user;
|
||||
use crate::database::queries::delete_tts_result::undelete_tts_inference_result_as_mod;
|
||||
use crate::database::queries::delete_tts_result::undelete_tts_inference_result_as_user;
|
||||
use crate::database::queries::query_tts_result::select_tts_result_by_token;
|
||||
use crate::http_server::web_utils::ip_address::get_request_ip;
|
||||
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::util::delete_role_disambiguation::DeleteRole;
|
||||
use crate::util::delete_role_disambiguation::delete_role_disambiguation;
|
||||
use crate::util::random_crockford_token::random_crockford_token;
|
||||
use crate::validations::model_uploads::validate_model_title;
|
||||
use crate::validations::passwords::validate_passwords;
|
||||
@@ -33,6 +39,8 @@ pub struct DeleteTtsInferenceResultPathInfo {
|
||||
#[derive(Deserialize)]
|
||||
pub struct DeleteTtsInferenceResultRequest {
|
||||
set_delete: bool,
|
||||
/// NB: this is only to disambiguate when a user is both a mod and an author.
|
||||
as_mod: Option<bool>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Display)]
|
||||
@@ -120,35 +128,48 @@ pub async fn delete_tts_inference_result_handler(
|
||||
return Err(DeleteTtsInferenceResultError::NotAuthorized);
|
||||
}
|
||||
|
||||
// NB: I can't imagine we need to store this.
|
||||
// let ip_address = get_request_ip(&http_request);
|
||||
let delete_role = delete_role_disambiguation(is_mod, is_author, request.as_mod);
|
||||
|
||||
let query_result = if request.set_delete {
|
||||
if is_author {
|
||||
user_delete_inference_result(
|
||||
&path.token,
|
||||
&server_state.mysql_pool
|
||||
).await
|
||||
} else {
|
||||
mod_delete_inference_result(
|
||||
&path.token,
|
||||
&user_session.user_token,
|
||||
&server_state.mysql_pool
|
||||
).await
|
||||
match delete_role {
|
||||
DeleteRole::ErrorDoNotDelete => {
|
||||
warn!("user is not allowed to delete inference results: {}", user_session.user_token);
|
||||
return Err(DeleteTtsInferenceResultError::NotAuthorized);
|
||||
}
|
||||
DeleteRole::AsUser => {
|
||||
delete_tts_inference_result_as_user(
|
||||
&path.token,
|
||||
&server_state.mysql_pool
|
||||
).await
|
||||
}
|
||||
DeleteRole::AsMod => {
|
||||
delete_tts_inference_result_as_mod(
|
||||
&path.token,
|
||||
&user_session.user_token,
|
||||
&server_state.mysql_pool
|
||||
).await
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if is_author {
|
||||
// NB: Technically only mods can see their own inference_results here
|
||||
user_undelete_inference_result(
|
||||
&path.token,
|
||||
&server_state.mysql_pool
|
||||
).await
|
||||
} else {
|
||||
mod_undelete_inference_result(
|
||||
&path.token,
|
||||
&user_session.user_token,
|
||||
&server_state.mysql_pool
|
||||
).await
|
||||
match delete_role {
|
||||
DeleteRole::ErrorDoNotDelete => {
|
||||
warn!("user is not allowed to undelete inference results: {}", user_session.user_token);
|
||||
return Err(DeleteTtsInferenceResultError::NotAuthorized);
|
||||
}
|
||||
DeleteRole::AsUser => {
|
||||
// NB: Technically only mods can see their own inference_results here
|
||||
undelete_tts_inference_result_as_user(
|
||||
&path.token,
|
||||
&server_state.mysql_pool
|
||||
).await
|
||||
}
|
||||
DeleteRole::AsMod => {
|
||||
undelete_tts_inference_result_as_mod(
|
||||
&path.token,
|
||||
&user_session.user_token,
|
||||
&server_state.mysql_pool
|
||||
).await
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -162,91 +183,3 @@ pub async fn delete_tts_inference_result_handler(
|
||||
|
||||
Ok(simple_json_success())
|
||||
}
|
||||
|
||||
async fn user_delete_inference_result(
|
||||
inference_result_token: &str,
|
||||
mysql_pool: &MySqlPool
|
||||
) -> Result<(), sqlx::Error> {
|
||||
let _r = sqlx::query!(
|
||||
r#"
|
||||
UPDATE tts_results
|
||||
SET
|
||||
user_deleted_at = CURRENT_TIMESTAMP
|
||||
WHERE
|
||||
token = ?
|
||||
LIMIT 1
|
||||
"#,
|
||||
inference_result_token,
|
||||
)
|
||||
.execute(mysql_pool)
|
||||
.await?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
async fn mod_delete_inference_result(
|
||||
inference_result_token: &str,
|
||||
mod_user_token: &str,
|
||||
mysql_pool: &MySqlPool
|
||||
) -> Result<(), sqlx::Error> {
|
||||
let _r = sqlx::query!(
|
||||
r#"
|
||||
UPDATE tts_results
|
||||
SET
|
||||
mod_deleted_at = CURRENT_TIMESTAMP,
|
||||
maybe_mod_user_token = ?
|
||||
WHERE
|
||||
token = ?
|
||||
LIMIT 1
|
||||
"#,
|
||||
mod_user_token,
|
||||
inference_result_token,
|
||||
)
|
||||
.execute(mysql_pool)
|
||||
.await?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
async fn user_undelete_inference_result(
|
||||
inference_result_token: &str,
|
||||
mysql_pool: &MySqlPool
|
||||
) -> Result<(), sqlx::Error> {
|
||||
|
||||
let _r = sqlx::query!(
|
||||
r#"
|
||||
UPDATE tts_results
|
||||
SET
|
||||
user_deleted_at = NULL
|
||||
WHERE
|
||||
token = ?
|
||||
LIMIT 1
|
||||
"#,
|
||||
inference_result_token,
|
||||
)
|
||||
.execute(mysql_pool)
|
||||
.await?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
async fn mod_undelete_inference_result(
|
||||
inference_result_token: &str,
|
||||
mod_user_token: &str,
|
||||
mysql_pool: &MySqlPool
|
||||
) -> Result<(), sqlx::Error> {
|
||||
|
||||
let _r = sqlx::query!(
|
||||
r#"
|
||||
UPDATE tts_results
|
||||
SET
|
||||
mod_deleted_at = NULL,
|
||||
maybe_mod_user_token = ?
|
||||
WHERE
|
||||
token = ?
|
||||
LIMIT 1
|
||||
"#,
|
||||
mod_user_token,
|
||||
inference_result_token,
|
||||
)
|
||||
.execute(mysql_pool)
|
||||
.await?;
|
||||
Ok(())
|
||||
}
|
||||
Reference in new issue
Block a user