mod fields for TTS results

This commit is contained in:
Brandon Thomas committed 2021-06-17 01:43:56 -04:00
1 parent 12466896e0
commit 02c1442e6c
2 files changed
+29 -3

No files matched your search

+20 -2
View File
@@ -42,6 +42,14 @@ pub struct TtsResultRecordForResponse {
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
pub maybe_moderator_fields: Option<TtsResultModeratorFields>,
}
/// "Moderator-only fields" that we wouldn't want to expose to ordinary users.
/// It's the web endpoint controller's responsibility to clear these for non-mods.
#[derive(Serialize)]
pub struct TtsResultModeratorFields {
pub creator_ip_address: String,
pub user_deleted_at: Option<DateTime<Utc>>,
pub mod_deleted_at: Option<DateTime<Utc>>,
}
@@ -76,6 +84,8 @@ pub struct TtsResultRecordRaw {
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
// Moderator fields
pub creator_ip_address: String,
pub user_deleted_at: Option<DateTime<Utc>>,
pub mod_deleted_at: Option<DateTime<Utc>>,
}
@@ -136,8 +146,12 @@ pub async fn select_tts_result_by_token(
created_at: ir.created_at.clone(),
updated_at: ir.updated_at.clone(),
user_deleted_at: ir.user_deleted_at.clone(),
mod_deleted_at: ir.mod_deleted_at.clone(),
maybe_moderator_fields: Some(TtsResultModeratorFields {
creator_ip_address: ir.creator_ip_address.clone(),
user_deleted_at: ir.user_deleted_at.clone(),
mod_deleted_at: ir.mod_deleted_at.clone(),
}),
};
Ok(Some(ir_for_response))
@@ -175,6 +189,8 @@ SELECT
tts_results.duration_millis,
tts_results.created_at,
tts_results.updated_at,
tts_results.creator_ip_address,
tts_results.user_deleted_at,
tts_results.mod_deleted_at
@@ -226,6 +242,8 @@ SELECT
tts_results.duration_millis,
tts_results.created_at,
tts_results.updated_at,
tts_results.creator_ip_address,
tts_results.user_deleted_at,
tts_results.mod_deleted_at
@@ -78,11 +78,15 @@ pub async fn get_tts_inference_result_handler(
})?;
let mut show_deleted_results = false;
let mut is_moderator = false;
if let Some(user_session) = maybe_user_session {
// NB: Moderators can see deleted results.
// Original creators cannot see them (unless they're moderators!)
show_deleted_results = user_session.can_delete_other_users_tts_results;
// Moderators get to see all the fields.
is_moderator = user_session.can_delete_other_users_tts_results
|| user_session.can_edit_other_users_tts_models;
}
let inference_result_query_result = select_tts_result_by_token(
@@ -91,7 +95,7 @@ pub async fn get_tts_inference_result_handler(
&server_state.mysql_pool
).await;
let inference_result = match inference_result_query_result {
let mut inference_result = match inference_result_query_result {
Err(e) => {
warn!("query error: {:?}", e);
return Err(GetTtsResultError::ServerError);
@@ -100,6 +104,10 @@ pub async fn get_tts_inference_result_handler(
Ok(Some(inference_result)) => inference_result,
};
if !is_moderator {
inference_result.maybe_moderator_fields = None;
}
let response = GetTtsResultSuccessResponse {
success: true,
result: inference_result,