mirror of
https://github.com/storytold/artcraft.git
synced 2026-11-04 17:38:10 +00:00
port the two "edit tts result" queries
This commit is contained in:
1 parent
89f8837706
commit
8ae5d34074
3 files changed
+95
-43
No files matched your search
@@ -0,0 +1,73 @@
|
||||
use anyhow::anyhow;
|
||||
use sqlx::MySqlPool;
|
||||
use enums::common::visibility::Visibility;
|
||||
use errors::AnyhowResult;
|
||||
|
||||
|
||||
pub struct EditTtsResultArgs<'a> {
|
||||
pub tts_result_token: &'a str,
|
||||
pub creator_set_visibility: Visibility,
|
||||
pub role_dependent_fields: CreatorOrModFields<'a>,
|
||||
|
||||
pub mysql_pool: &'a MySqlPool,
|
||||
}
|
||||
|
||||
pub enum CreatorOrModFields<'a> {
|
||||
CreatorFields {
|
||||
creator_ip_address: &'a str,
|
||||
},
|
||||
ModFields {
|
||||
mod_user_token: &'a str,
|
||||
}
|
||||
}
|
||||
|
||||
pub async fn edit_tts_result(args: EditTtsResultArgs<'_>) -> AnyhowResult<()> {
|
||||
|
||||
let query_result = match args.role_dependent_fields {
|
||||
//
|
||||
// For creator users
|
||||
CreatorOrModFields::CreatorFields { creator_ip_address } => {
|
||||
// TODO: Don't update the original IP address. Create a new field.
|
||||
sqlx::query!(
|
||||
r#"
|
||||
UPDATE tts_results
|
||||
SET
|
||||
creator_set_visibility = ?,
|
||||
creator_ip_address = ?
|
||||
WHERE token = ?
|
||||
LIMIT 1
|
||||
"#,
|
||||
args.creator_set_visibility.to_str(),
|
||||
creator_ip_address,
|
||||
args.tts_result_token,
|
||||
)
|
||||
.execute(args.mysql_pool)
|
||||
.await
|
||||
},
|
||||
|
||||
//
|
||||
// For moderators
|
||||
CreatorOrModFields::ModFields { mod_user_token } => {
|
||||
sqlx::query!(
|
||||
r#"
|
||||
UPDATE tts_results
|
||||
SET
|
||||
creator_set_visibility = ?,
|
||||
maybe_mod_user_token = ?
|
||||
WHERE token = ?
|
||||
LIMIT 1
|
||||
"#,
|
||||
args.creator_set_visibility.to_str(),
|
||||
mod_user_token,
|
||||
args.tts_result_token,
|
||||
)
|
||||
.execute(args.mysql_pool)
|
||||
.await
|
||||
},
|
||||
};
|
||||
|
||||
match query_result {
|
||||
Ok(_) => Ok(()),
|
||||
Err(err) => Err(anyhow!("Update TTS result DB error: {:?}", err)),
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
pub mod delete_tts_result_various_scopes;
|
||||
pub mod edit_tts_result;
|
||||
pub mod insert_tts_result;
|
||||
pub mod list_tts_results_query_builder;
|
||||
pub mod query_tts_result;
|
||||
+21
-43
@@ -10,10 +10,11 @@ use actix_web::{web, HttpResponse, HttpRequest};
|
||||
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 database_queries::queries::tts::tts_results::edit_tts_result::{CreatorOrModFields, edit_tts_result, EditTtsResultArgs};
|
||||
use database_queries::queries::tts::tts_results::query_tts_result::select_tts_result_by_token;
|
||||
use enums::common::visibility::Visibility;
|
||||
use http_server_common::request::get_request_ip::get_request_ip;
|
||||
use log::warn;
|
||||
use log::{error, warn};
|
||||
use std::fmt;
|
||||
use std::sync::Arc;
|
||||
|
||||
@@ -134,50 +135,27 @@ pub async fn edit_tts_inference_result_handler(
|
||||
|
||||
let ip_address = get_request_ip(&http_request);
|
||||
|
||||
let query_result = if is_author {
|
||||
// TODO: Don't update the original IP address. Create a new field.
|
||||
// We need to store the IP address details.
|
||||
sqlx::query!(
|
||||
r#"
|
||||
UPDATE tts_results
|
||||
SET
|
||||
creator_set_visibility = ?,
|
||||
creator_ip_address = ?
|
||||
WHERE token = ?
|
||||
LIMIT 1
|
||||
"#,
|
||||
&creator_set_visibility.to_str(),
|
||||
&ip_address,
|
||||
&inference_result.tts_result_token,
|
||||
)
|
||||
.execute(&server_state.mysql_pool)
|
||||
.await
|
||||
} else {
|
||||
// We need to store the moderator details.
|
||||
sqlx::query!(
|
||||
r#"
|
||||
UPDATE tts_results
|
||||
SET
|
||||
creator_set_visibility = ?,
|
||||
maybe_mod_user_token = ?
|
||||
WHERE token = ?
|
||||
LIMIT 1
|
||||
"#,
|
||||
&creator_set_visibility.to_str(),
|
||||
&user_session.user_token,
|
||||
&inference_result.tts_result_token,
|
||||
)
|
||||
.execute(&server_state.mysql_pool)
|
||||
.await
|
||||
let args = EditTtsResultArgs {
|
||||
tts_result_token: &inference_result.tts_result_token,
|
||||
creator_set_visibility,
|
||||
role_dependent_fields: if is_author {
|
||||
CreatorOrModFields::CreatorFields {
|
||||
creator_ip_address: &ip_address,
|
||||
}
|
||||
} else {
|
||||
CreatorOrModFields::ModFields {
|
||||
mod_user_token: &user_session.user_token,
|
||||
}
|
||||
},
|
||||
mysql_pool: &server_state.mysql_pool,
|
||||
};
|
||||
|
||||
match query_result {
|
||||
Ok(_) => {},
|
||||
Err(err) => {
|
||||
warn!("Update TTS result DB error: {:?}", err);
|
||||
return Err(EditTtsResultError::ServerError);
|
||||
}
|
||||
};
|
||||
edit_tts_result(args)
|
||||
.await
|
||||
.map_err(|err| {
|
||||
error!("Update TTS result DB error: {:?}", err);
|
||||
EditTtsResultError::ServerError
|
||||
})?;
|
||||
|
||||
Ok(simple_json_success())
|
||||
}
|
||||
Reference in new issue
Block a user