mirror of
https://github.com/storytold/artcraft.git
synced 2026-11-07 02:21:23 +00:00
cleanup of in-app i8_to_bool, some derive_more, etc.
This commit is contained in:
1 parent
0d3faf230d
commit
30b484a92d
16 files changed
+176
-232
No files matched your search
@@ -1,62 +0,0 @@
|
||||
|
||||
/// MySQL stores non-nullable booleans as i8.
|
||||
pub fn i8_to_bool(value: i8) -> bool {
|
||||
if value == 0 {
|
||||
false
|
||||
} else {
|
||||
true
|
||||
}
|
||||
}
|
||||
|
||||
/// Bool conversion, but turn nulls to a default value.
|
||||
pub fn nullable_i8_to_bool(value: Option<i8>, default_value: bool) -> bool {
|
||||
value.map(|v| i8_to_bool(v))
|
||||
.unwrap_or(default_value)
|
||||
}
|
||||
|
||||
/// Bool conversion, but retain nulls.
|
||||
pub fn nullable_i8_to_optional_bool(value: Option<i8>) -> Option<bool> {
|
||||
value.map(|v| i8_to_bool(v))
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use crate::database::helpers::boolean_converters::{
|
||||
i8_to_bool,
|
||||
nullable_i8_to_bool,
|
||||
nullable_i8_to_optional_bool
|
||||
};
|
||||
|
||||
#[test]
|
||||
fn test_i8_to_bool() {
|
||||
assert_eq!(i8_to_bool(0), false);
|
||||
assert_eq!(i8_to_bool(1), true);
|
||||
assert_eq!(i8_to_bool(-1), true);
|
||||
assert_eq!(i8_to_bool(120), true);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_nullable_i8_to_bool() {
|
||||
assert_eq!(nullable_i8_to_bool(None, false), false);
|
||||
assert_eq!(nullable_i8_to_bool(None, true), true);
|
||||
assert_eq!(nullable_i8_to_bool(Some(0), false), false);
|
||||
assert_eq!(nullable_i8_to_bool(Some(0), true), false);
|
||||
|
||||
assert_eq!(nullable_i8_to_bool(Some(1), false), true);
|
||||
assert_eq!(nullable_i8_to_bool(Some(1), true), true);
|
||||
|
||||
assert_eq!(nullable_i8_to_bool(Some(100), false), true);
|
||||
assert_eq!(nullable_i8_to_bool(Some(100), true), true);
|
||||
assert_eq!(nullable_i8_to_bool(Some(-100), false), true);
|
||||
assert_eq!(nullable_i8_to_bool(Some(-100), true), true);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_nullable_i8_to_optional_bool() {
|
||||
assert_eq!(nullable_i8_to_optional_bool(None), None);
|
||||
assert_eq!(nullable_i8_to_optional_bool(Some(0)), Some(false));
|
||||
assert_eq!(nullable_i8_to_optional_bool(Some(1)), Some(true));
|
||||
assert_eq!(nullable_i8_to_optional_bool(Some(100)), Some(true));
|
||||
assert_eq!(nullable_i8_to_optional_bool(Some(-100)), Some(true));
|
||||
}
|
||||
}
|
||||
@@ -1,2 +1 @@
|
||||
pub mod boolean_converters;
|
||||
pub mod enums;
|
||||
+16
-16
@@ -1,7 +1,7 @@
|
||||
use anyhow::anyhow;
|
||||
use chrono::{DateTime, Utc};
|
||||
use crate::AnyhowResult;
|
||||
use crate::database::helpers::boolean_converters::{i8_to_bool, nullable_i8_to_optional_bool};
|
||||
use database_queries::helpers::boolean_converters::{nullable_i8_to_optional_bool, i8_to_bool};
|
||||
use log::{info, warn, log};
|
||||
use sqlx::MySqlPool;
|
||||
|
||||
@@ -96,26 +96,26 @@ WHERE
|
||||
};
|
||||
|
||||
let category = ModelCategory {
|
||||
category_token: category.category_token.clone(),
|
||||
model_type: category.model_type.clone(),
|
||||
maybe_super_category_token: category.maybe_super_category_token.clone(),
|
||||
category_token: category.category_token,
|
||||
model_type: category.model_type,
|
||||
maybe_super_category_token: category.maybe_super_category_token,
|
||||
can_directly_have_models: i8_to_bool(category.can_directly_have_models),
|
||||
can_have_subcategories: i8_to_bool(category.can_have_subcategories),
|
||||
can_only_mods_apply: i8_to_bool(category.can_only_mods_apply),
|
||||
name: category.name.clone(),
|
||||
maybe_dropdown_name: category.maybe_dropdown_name.clone(),
|
||||
creator_user_token: category.creator_user_token.clone(),
|
||||
creator_username: category.creator_username.clone(),
|
||||
creator_display_name: category.creator_display_name.clone(),
|
||||
creator_gravatar_hash: category.creator_gravatar_hash.clone(),
|
||||
creator_ip_address_creation: category.creator_ip_address_creation.clone(),
|
||||
creator_ip_address_last_update: category.creator_ip_address_last_update.clone(),
|
||||
maybe_dropdown_name: category.maybe_dropdown_name,
|
||||
creator_user_token: category.creator_user_token,
|
||||
creator_username: category.creator_username,
|
||||
creator_display_name: category.creator_display_name,
|
||||
creator_gravatar_hash: category.creator_gravatar_hash,
|
||||
creator_ip_address_creation: category.creator_ip_address_creation,
|
||||
creator_ip_address_last_update: category.creator_ip_address_last_update,
|
||||
is_mod_approved: nullable_i8_to_optional_bool(category.is_mod_approved),
|
||||
maybe_mod_comments: category.maybe_mod_comments.clone(),
|
||||
maybe_mod_user_token: category.maybe_mod_user_token.clone(),
|
||||
created_at: category.created_at.clone(),
|
||||
updated_at: category.updated_at.clone(),
|
||||
deleted_at: category.deleted_at.clone(),
|
||||
maybe_mod_comments: category.maybe_mod_comments,
|
||||
maybe_mod_user_token: category.maybe_mod_user_token,
|
||||
created_at: category.created_at,
|
||||
updated_at: category.updated_at,
|
||||
deleted_at: category.deleted_at,
|
||||
};
|
||||
|
||||
Ok(Some(category))
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
use anyhow::anyhow;
|
||||
use chrono::{DateTime, Utc};
|
||||
use crate::AnyhowResult;
|
||||
use crate::database::helpers::boolean_converters::i8_to_bool;
|
||||
use database_queries::helpers::boolean_converters::i8_to_bool;
|
||||
use derive_more::{Display, Error};
|
||||
use log::{info, warn, log};
|
||||
use md5::{Md5, Digest};
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
use anyhow::anyhow;
|
||||
use chrono::{DateTime, Utc};
|
||||
use container_common::anyhow_result::AnyhowResult;
|
||||
use crate::database::helpers::boolean_converters::{nullable_i8_to_optional_bool, i8_to_bool};
|
||||
use database_queries::helpers::boolean_converters::i8_to_bool;
|
||||
use log::{warn, info};
|
||||
use sqlx::MySqlPool;
|
||||
|
||||
@@ -125,8 +125,8 @@ FROM user_roles
|
||||
Ok(user_roles.into_iter()
|
||||
.map(|ur| {
|
||||
UserRoleForList {
|
||||
slug: ur.slug.clone(),
|
||||
name: ur.name.clone(),
|
||||
slug: ur.slug,
|
||||
name: ur.name,
|
||||
can_use_tts: i8_to_bool(ur.can_use_tts),
|
||||
can_use_w2l: i8_to_bool(ur.can_use_w2l),
|
||||
can_delete_own_tts_results: i8_to_bool(ur.can_delete_own_tts_results),
|
||||
@@ -146,8 +146,8 @@ FROM user_roles
|
||||
can_delete_other_users_w2l_results: i8_to_bool(ur.can_delete_other_users_w2l_results),
|
||||
can_ban_users: i8_to_bool(ur.can_ban_users),
|
||||
can_delete_users: i8_to_bool(ur.can_delete_users),
|
||||
created_at: ur.created_at.clone(),
|
||||
updated_at: ur.updated_at.clone(),
|
||||
created_at: ur.created_at,
|
||||
updated_at: ur.updated_at,
|
||||
}
|
||||
})
|
||||
.collect::<Vec<UserRoleForList>>())
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
use anyhow::anyhow;
|
||||
use chrono::{DateTime, Utc};
|
||||
use container_common::anyhow_result::AnyhowResult;
|
||||
use crate::database::helpers::boolean_converters::nullable_i8_to_optional_bool;
|
||||
use log::{warn, info};
|
||||
use sqlx::MySqlPool;
|
||||
use database_queries::helpers::boolean_converters::nullable_i8_to_optional_bool;
|
||||
|
||||
#[derive(Serialize)]
|
||||
pub struct W2lTemplateRecordForList {
|
||||
@@ -80,20 +80,20 @@ pub async fn list_w2l_templates(
|
||||
Ok(templates.into_iter()
|
||||
.map(|template| {
|
||||
W2lTemplateRecordForList {
|
||||
template_token: template.template_token.clone(),
|
||||
template_type: template.template_type.clone(),
|
||||
creator_user_token: template.creator_user_token.clone(),
|
||||
creator_username: template.creator_username.clone(),
|
||||
creator_display_name: template.creator_display_name.clone(),
|
||||
title: template.title.clone(),
|
||||
template_token: template.template_token,
|
||||
template_type: template.template_type,
|
||||
creator_user_token: template.creator_user_token,
|
||||
creator_username: template.creator_username,
|
||||
creator_display_name: template.creator_display_name,
|
||||
title: template.title,
|
||||
frame_width: if template.frame_width > 0 { template.frame_width as u32 } else { 0 },
|
||||
frame_height: if template.frame_height > 0 { template.frame_height as u32 } else { 0 },
|
||||
duration_millis: if template.duration_millis > 0 { template.duration_millis as u32 } else { 0 },
|
||||
maybe_image_object_name: template.maybe_public_bucket_preview_image_object_name.clone(),
|
||||
maybe_video_object_name: template.maybe_public_bucket_preview_video_object_name.clone(),
|
||||
maybe_image_object_name: template.maybe_public_bucket_preview_image_object_name,
|
||||
maybe_video_object_name: template.maybe_public_bucket_preview_video_object_name,
|
||||
is_public_listing_approved: nullable_i8_to_optional_bool(template.is_public_listing_approved),
|
||||
created_at: template.created_at.clone(),
|
||||
updated_at: template.updated_at.clone(),
|
||||
created_at: template.created_at,
|
||||
updated_at: template.updated_at,
|
||||
}
|
||||
})
|
||||
.collect::<Vec<W2lTemplateRecordForList>>())
|
||||
|
||||
@@ -3,9 +3,7 @@ use chrono::{DateTime, Utc};
|
||||
use crate::AnyhowResult;
|
||||
use crate::database::enums::record_visibility::RecordVisibility;
|
||||
use crate::database::enums::vocoder_type::VocoderType;
|
||||
use crate::database::helpers::boolean_converters::{i8_to_bool, nullable_i8_to_bool};
|
||||
use crate::database::helpers::boolean_converters::nullable_i8_to_optional_bool;
|
||||
use derive_more::{Display, Error};
|
||||
use database_queries::helpers::boolean_converters::nullable_i8_to_bool;
|
||||
use log::{info, warn, log};
|
||||
use regex::Regex;
|
||||
use sqlx::MySqlPool;
|
||||
@@ -138,29 +136,29 @@ pub async fn select_tts_result_by_token(
|
||||
}
|
||||
|
||||
let ir_for_response = TtsResultRecordForResponse {
|
||||
tts_result_token: ir.tts_result_token.clone(),
|
||||
tts_result_token: ir.tts_result_token,
|
||||
|
||||
raw_inference_text: ir.raw_inference_text.clone(),
|
||||
raw_inference_text: ir.raw_inference_text,
|
||||
|
||||
tts_model_token: ir.tts_model_token.clone(),
|
||||
tts_model_title: ir.tts_model_title.clone(),
|
||||
tts_model_token: ir.tts_model_token,
|
||||
tts_model_title: ir.tts_model_title,
|
||||
|
||||
maybe_pretrained_vocoder_used: pretrained_vocoder,
|
||||
|
||||
maybe_creator_user_token: ir.maybe_creator_user_token.clone(),
|
||||
maybe_creator_username: ir.maybe_creator_username.clone(),
|
||||
maybe_creator_display_name: ir.maybe_creator_display_name.clone(),
|
||||
maybe_creator_gravatar_hash: ir.maybe_creator_gravatar_hash.clone(),
|
||||
maybe_creator_user_token: ir.maybe_creator_user_token,
|
||||
maybe_creator_username: ir.maybe_creator_username,
|
||||
maybe_creator_display_name: ir.maybe_creator_display_name,
|
||||
maybe_creator_gravatar_hash: ir.maybe_creator_gravatar_hash,
|
||||
|
||||
maybe_model_creator_user_token: ir.maybe_model_creator_user_token.clone(),
|
||||
maybe_model_creator_username: ir.maybe_model_creator_username.clone(),
|
||||
maybe_model_creator_display_name: ir.maybe_model_creator_display_name.clone(),
|
||||
maybe_model_creator_gravatar_hash: ir.maybe_model_creator_gravatar_hash.clone(),
|
||||
maybe_model_creator_user_token: ir.maybe_model_creator_user_token,
|
||||
maybe_model_creator_username: ir.maybe_model_creator_username,
|
||||
maybe_model_creator_display_name: ir.maybe_model_creator_display_name,
|
||||
maybe_model_creator_gravatar_hash: ir.maybe_model_creator_gravatar_hash,
|
||||
|
||||
//model_is_mod_approved: if ir.model_is_mod_approved == 0 { false } else { true },
|
||||
|
||||
public_bucket_wav_audio_path: ir.public_bucket_wav_audio_path.clone(),
|
||||
public_bucket_spectrogram_path: ir.public_bucket_spectrogram_path.clone(),
|
||||
public_bucket_wav_audio_path: ir.public_bucket_wav_audio_path,
|
||||
public_bucket_spectrogram_path: ir.public_bucket_spectrogram_path,
|
||||
|
||||
// NB: Fail open/public since we're already looking at it
|
||||
creator_set_visibility: RecordVisibility::from_str(&ir.creator_set_visibility)
|
||||
@@ -169,17 +167,17 @@ pub async fn select_tts_result_by_token(
|
||||
file_size_bytes: if ir.file_size_bytes > 0 { ir.file_size_bytes as u32 } else { 0 },
|
||||
duration_millis: if ir.duration_millis > 0 { ir.duration_millis as u32 } else { 0 },
|
||||
|
||||
created_at: ir.created_at.clone(),
|
||||
updated_at: ir.updated_at.clone(),
|
||||
created_at: ir.created_at,
|
||||
updated_at: ir.updated_at,
|
||||
|
||||
maybe_moderator_fields: Some(TtsResultModeratorFields {
|
||||
model_creator_is_banned:
|
||||
nullable_i8_to_bool(ir.maybe_model_creator_is_banned, false),
|
||||
result_creator_is_banned_if_user:
|
||||
nullable_i8_to_bool(ir.maybe_creator_is_banned, false),
|
||||
result_creator_ip_address: ir.creator_ip_address.clone(),
|
||||
result_creator_deleted_at: ir.user_deleted_at.clone(),
|
||||
mod_deleted_at: ir.mod_deleted_at.clone(),
|
||||
result_creator_ip_address: ir.creator_ip_address,
|
||||
result_creator_deleted_at: ir.user_deleted_at,
|
||||
mod_deleted_at: ir.mod_deleted_at,
|
||||
}),
|
||||
};
|
||||
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
use anyhow::anyhow;
|
||||
use chrono::{DateTime, Utc};
|
||||
use crate::AnyhowResult;
|
||||
use crate::database::helpers::boolean_converters::{i8_to_bool, nullable_i8_to_bool};
|
||||
use crate::database::helpers::boolean_converters::nullable_i8_to_optional_bool;
|
||||
use derive_more::{Display, Error};
|
||||
use crate::database::enums::record_visibility::RecordVisibility;
|
||||
use database_queries::helpers::boolean_converters::nullable_i8_to_bool;
|
||||
use log::{info, warn, log};
|
||||
use regex::Regex;
|
||||
use sqlx::MySqlPool;
|
||||
@@ -11,7 +10,6 @@ use sqlx::error::DatabaseError;
|
||||
use sqlx::error::Error::Database;
|
||||
use sqlx::mysql::MySqlDatabaseError;
|
||||
use std::sync::Arc;
|
||||
use crate::database::enums::record_visibility::RecordVisibility;
|
||||
|
||||
#[derive(Serialize)]
|
||||
pub struct W2lResultRecordForResponse {
|
||||
@@ -132,24 +130,24 @@ pub async fn select_w2l_result_by_token(
|
||||
};
|
||||
|
||||
let ir_for_response = W2lResultRecordForResponse {
|
||||
w2l_result_token: ir.w2l_result_token.clone(),
|
||||
maybe_w2l_template_token: ir.maybe_w2l_template_token.clone(),
|
||||
maybe_tts_inference_result_token: ir.maybe_tts_inference_result_token.clone(),
|
||||
w2l_result_token: ir.w2l_result_token,
|
||||
maybe_w2l_template_token: ir.maybe_w2l_template_token,
|
||||
maybe_tts_inference_result_token: ir.maybe_tts_inference_result_token,
|
||||
|
||||
public_bucket_video_path: ir.public_bucket_video_path.clone(),
|
||||
public_bucket_video_path: ir.public_bucket_video_path,
|
||||
|
||||
template_type: ir.template_type.clone(),
|
||||
template_title: ir.template_title.clone(),
|
||||
template_type: ir.template_type,
|
||||
template_title: ir.template_title,
|
||||
|
||||
maybe_creator_user_token: ir.maybe_creator_user_token.clone(),
|
||||
maybe_creator_username: ir.maybe_creator_username.clone(),
|
||||
maybe_creator_display_name: ir.maybe_creator_display_name.clone(),
|
||||
maybe_creator_gravatar_hash: ir.maybe_creator_gravatar_hash.clone(),
|
||||
maybe_creator_user_token: ir.maybe_creator_user_token,
|
||||
maybe_creator_username: ir.maybe_creator_username,
|
||||
maybe_creator_display_name: ir.maybe_creator_display_name,
|
||||
maybe_creator_gravatar_hash: ir.maybe_creator_gravatar_hash,
|
||||
|
||||
maybe_template_creator_user_token: ir.maybe_template_creator_user_token.clone(),
|
||||
maybe_template_creator_username: ir.maybe_template_creator_username.clone(),
|
||||
maybe_template_creator_display_name: ir.maybe_template_creator_display_name.clone(),
|
||||
maybe_template_creator_gravatar_hash: ir.maybe_template_creator_gravatar_hash.clone(),
|
||||
maybe_template_creator_user_token: ir.maybe_template_creator_user_token,
|
||||
maybe_template_creator_username: ir.maybe_template_creator_username,
|
||||
maybe_template_creator_display_name: ir.maybe_template_creator_display_name,
|
||||
maybe_template_creator_gravatar_hash: ir.maybe_template_creator_gravatar_hash,
|
||||
|
||||
// NB: Fail open/public since we're already looking at it
|
||||
creator_set_visibility: RecordVisibility::from_str(&ir.creator_set_visibility)
|
||||
@@ -162,17 +160,17 @@ pub async fn select_w2l_result_by_token(
|
||||
frame_height: if ir.frame_height > 0 { ir.frame_height as u32 } else { 0 },
|
||||
duration_millis: if ir.duration_millis > 0 { ir.duration_millis as u32 } else { 0 },
|
||||
|
||||
created_at: ir.created_at.clone(),
|
||||
updated_at: ir.updated_at.clone(),
|
||||
created_at: ir.created_at,
|
||||
updated_at: ir.updated_at,
|
||||
|
||||
maybe_moderator_fields: Some(W2lResultModeratorFields {
|
||||
template_creator_is_banned:
|
||||
nullable_i8_to_bool(ir.maybe_template_creator_is_banned, false),
|
||||
result_creator_is_banned_if_user:
|
||||
nullable_i8_to_bool(ir.maybe_creator_is_banned, false),
|
||||
result_creator_ip_address: ir.creator_ip_address.clone(),
|
||||
result_creator_deleted_at: ir.user_deleted_at.clone(),
|
||||
mod_deleted_at: ir.mod_deleted_at.clone(),
|
||||
result_creator_ip_address: ir.creator_ip_address,
|
||||
result_creator_deleted_at: ir.user_deleted_at,
|
||||
mod_deleted_at: ir.mod_deleted_at,
|
||||
}),
|
||||
};
|
||||
|
||||
|
||||
@@ -2,8 +2,7 @@ use anyhow::anyhow;
|
||||
use chrono::{DateTime, Utc};
|
||||
use crate::AnyhowResult;
|
||||
use crate::database::enums::record_visibility::RecordVisibility;
|
||||
use crate::database::helpers::boolean_converters::i8_to_bool;
|
||||
use crate::database::helpers::boolean_converters::nullable_i8_to_optional_bool;
|
||||
use database_queries::helpers::boolean_converters::{nullable_i8_to_optional_bool, i8_to_bool};
|
||||
use derive_more::{Display, Error};
|
||||
use log::{info, warn, log};
|
||||
use regex::Regex;
|
||||
@@ -107,34 +106,34 @@ pub async fn select_w2l_template_by_token(
|
||||
};
|
||||
|
||||
let template_for_response = W2lTemplateRecordForResponse {
|
||||
template_token: template.template_token.clone(),
|
||||
template_type: template.template_type.clone(),
|
||||
creator_user_token: template.creator_user_token.clone(),
|
||||
creator_username: template.creator_username.clone(),
|
||||
creator_display_name: template.creator_display_name.clone(),
|
||||
creator_gravatar_hash: template.creator_gravatar_hash.clone(),
|
||||
title: template.title.clone(),
|
||||
description_markdown: template.description_markdown.clone(),
|
||||
description_rendered_html: template.description_rendered_html.clone(),
|
||||
template_token: template.template_token,
|
||||
template_type: template.template_type,
|
||||
creator_user_token: template.creator_user_token,
|
||||
creator_username: template.creator_username,
|
||||
creator_display_name: template.creator_display_name,
|
||||
creator_gravatar_hash: template.creator_gravatar_hash,
|
||||
title: template.title,
|
||||
description_markdown: template.description_markdown,
|
||||
description_rendered_html: template.description_rendered_html,
|
||||
frame_width: if template.frame_width > 0 { template.frame_width as u32 } else { 0 },
|
||||
frame_height: if template.frame_height > 0 { template.frame_height as u32 } else { 0 },
|
||||
duration_millis: if template.duration_millis > 0 { template.duration_millis as u32 } else { 0 },
|
||||
maybe_image_object_name: template.maybe_public_bucket_preview_image_object_name.clone(),
|
||||
maybe_video_object_name: template.maybe_public_bucket_preview_video_object_name.clone(),
|
||||
maybe_image_object_name: template.maybe_public_bucket_preview_image_object_name,
|
||||
maybe_video_object_name: template.maybe_public_bucket_preview_video_object_name,
|
||||
// NB: Fail open/public with creator_set_visibility since we're already looking at it
|
||||
creator_set_visibility: RecordVisibility::from_str(&template.creator_set_visibility)
|
||||
.unwrap_or(RecordVisibility::Public),
|
||||
is_public_listing_approved: nullable_i8_to_optional_bool(template.is_public_listing_approved),
|
||||
is_locked_from_use: i8_to_bool(template.is_locked_from_use),
|
||||
is_locked_from_user_modification: i8_to_bool(template.is_locked_from_user_modification),
|
||||
created_at: template.created_at.clone(),
|
||||
updated_at: template.updated_at.clone(),
|
||||
created_at: template.created_at,
|
||||
updated_at: template.updated_at,
|
||||
maybe_moderator_fields: Some(W2lTemplateModeratorFields {
|
||||
creator_is_banned: i8_to_bool(template.creator_is_banned),
|
||||
creator_ip_address_creation: template.creator_ip_address_creation.clone(),
|
||||
creator_ip_address_last_update: template.creator_ip_address_last_update.clone(),
|
||||
user_deleted_at: template.user_deleted_at.clone(),
|
||||
mod_deleted_at: template.mod_deleted_at.clone(),
|
||||
creator_ip_address_creation: template.creator_ip_address_creation,
|
||||
creator_ip_address_last_update: template.creator_ip_address_last_update,
|
||||
user_deleted_at: template.user_deleted_at,
|
||||
mod_deleted_at: template.mod_deleted_at,
|
||||
}),
|
||||
};
|
||||
|
||||
|
||||
+14
-14
@@ -2,7 +2,7 @@ use anyhow::anyhow;
|
||||
use chrono::{DateTime, Utc};
|
||||
use container_common::anyhow_result::AnyhowResult;
|
||||
use crate::database::enums::record_visibility::RecordVisibility;
|
||||
use crate::database::helpers::boolean_converters::{i8_to_bool, nullable_i8_to_optional_bool};
|
||||
use database_queries::helpers::boolean_converters::{i8_to_bool, nullable_i8_to_optional_bool};
|
||||
use log::{warn, info};
|
||||
use sqlx::MySqlPool;
|
||||
|
||||
@@ -103,29 +103,29 @@ impl ListAssignedTtsCategoriesQueryBuilder {
|
||||
let internal_results = self.perform_internal_query(mysql_pool).await?;
|
||||
|
||||
let categories = internal_results
|
||||
.iter()
|
||||
.into_iter()
|
||||
.map(|c| {
|
||||
AssignedCategory {
|
||||
category_token: c.category_token.clone(),
|
||||
model_type: c.model_type.clone(),
|
||||
maybe_super_category_token: c.maybe_super_category_token.clone(),
|
||||
category_token: c.category_token,
|
||||
model_type: c.model_type,
|
||||
maybe_super_category_token: c.maybe_super_category_token,
|
||||
can_directly_have_models: i8_to_bool(c.can_directly_have_models),
|
||||
can_have_subcategories: i8_to_bool(c.can_have_subcategories),
|
||||
can_only_mods_apply: i8_to_bool(c.can_only_mods_apply),
|
||||
name: c.name.clone(),
|
||||
maybe_dropdown_name: c.maybe_dropdown_name.clone(),
|
||||
category_creator_user_token: c.category_creator_user_token.clone(),
|
||||
category_creator_username: c.category_creator_username.clone(),
|
||||
category_creator_display_name: c.category_creator_display_name.clone(),
|
||||
category_creator_gravatar_hash: c.category_creator_gravatar_hash.clone(),
|
||||
name: c.name,
|
||||
maybe_dropdown_name: c.maybe_dropdown_name,
|
||||
category_creator_user_token: c.category_creator_user_token,
|
||||
category_creator_username: c.category_creator_username,
|
||||
category_creator_display_name: c.category_creator_display_name,
|
||||
category_creator_gravatar_hash: c.category_creator_gravatar_hash,
|
||||
is_mod_approved: nullable_i8_to_optional_bool(c.is_mod_approved),
|
||||
maybe_mod_comments: c.maybe_mod_comments.clone(),
|
||||
maybe_mod_comments: c.maybe_mod_comments,
|
||||
category_created_at: c.category_created_at,
|
||||
category_updated_at: c.category_updated_at,
|
||||
category_deleted_at: c.category_deleted_at.clone(),
|
||||
category_deleted_at: c.category_deleted_at,
|
||||
category_assignment_created_at: c.category_assignment_created_at,
|
||||
category_assignment_updated_at: c.category_assignment_updated_at,
|
||||
category_assignment_deleted_at: c.category_assignment_deleted_at.clone(),
|
||||
category_assignment_deleted_at: c.category_assignment_deleted_at,
|
||||
}
|
||||
})
|
||||
.collect::<Vec<AssignedCategory>>();
|
||||
|
||||
+13
-13
@@ -2,7 +2,7 @@ use anyhow::anyhow;
|
||||
use chrono::{DateTime, Utc};
|
||||
use container_common::anyhow_result::AnyhowResult;
|
||||
use crate::database::enums::record_visibility::RecordVisibility;
|
||||
use crate::database::helpers::boolean_converters::{i8_to_bool, nullable_i8_to_optional_bool};
|
||||
use database_queries::helpers::boolean_converters::{i8_to_bool, nullable_i8_to_optional_bool};
|
||||
use log::{warn, info};
|
||||
use sqlx::MySqlPool;
|
||||
|
||||
@@ -127,26 +127,26 @@ impl ListCategoriesQueryBuilder {
|
||||
let internal_results = self.perform_internal_query(mysql_pool).await?;
|
||||
|
||||
let categories = internal_results
|
||||
.iter()
|
||||
.into_iter()
|
||||
.map(|c| {
|
||||
Category {
|
||||
category_token: c.category_token.clone(),
|
||||
model_type: c.model_type.clone(),
|
||||
maybe_super_category_token: c.maybe_super_category_token.clone(),
|
||||
category_token: c.category_token,
|
||||
model_type: c.model_type,
|
||||
maybe_super_category_token: c.maybe_super_category_token,
|
||||
can_directly_have_models: i8_to_bool(c.can_directly_have_models),
|
||||
can_have_subcategories: i8_to_bool(c.can_have_subcategories),
|
||||
can_only_mods_apply: i8_to_bool(c.can_only_mods_apply),
|
||||
name: c.name.clone(),
|
||||
maybe_dropdown_name: c.maybe_dropdown_name.clone(),
|
||||
creator_user_token: c.creator_user_token.clone(),
|
||||
creator_username: c.creator_username.clone(),
|
||||
creator_display_name: c.creator_display_name.clone(),
|
||||
creator_gravatar_hash: c.creator_gravatar_hash.clone(),
|
||||
name: c.name,
|
||||
maybe_dropdown_name: c.maybe_dropdown_name,
|
||||
creator_user_token: c.creator_user_token,
|
||||
creator_username: c.creator_username,
|
||||
creator_display_name: c.creator_display_name,
|
||||
creator_gravatar_hash: c.creator_gravatar_hash,
|
||||
is_mod_approved: nullable_i8_to_optional_bool(c.is_mod_approved),
|
||||
maybe_mod_comments: c.maybe_mod_comments.clone(),
|
||||
maybe_mod_comments: c.maybe_mod_comments,
|
||||
created_at: c.created_at,
|
||||
updated_at: c.updated_at,
|
||||
deleted_at: c.deleted_at.clone(),
|
||||
deleted_at: c.deleted_at,
|
||||
}
|
||||
})
|
||||
.collect::<Vec<Category>>();
|
||||
|
||||
+12
-12
@@ -1,6 +1,6 @@
|
||||
use chrono::{DateTime, Utc};
|
||||
use container_common::anyhow_result::AnyhowResult;
|
||||
use crate::database::helpers::boolean_converters::i8_to_bool;
|
||||
use database_queries::helpers::boolean_converters::i8_to_bool;
|
||||
use sqlx::MySqlPool;
|
||||
|
||||
/// NB: This is not to be shared externally.
|
||||
@@ -70,21 +70,21 @@ impl ListUsersQueryBuilder {
|
||||
.map(|raw_result| raw_result.user_id);
|
||||
|
||||
let users = internal_results
|
||||
.iter()
|
||||
.into_iter()
|
||||
.map(|r| {
|
||||
UserForList {
|
||||
user_id: r.user_id,
|
||||
user_token: r.user_token.clone(),
|
||||
username: r.username.clone(),
|
||||
display_name: r.display_name.clone(),
|
||||
gravatar_hash: r.gravatar_hash.clone(),
|
||||
user_token: r.user_token,
|
||||
username: r.username,
|
||||
display_name: r.display_name,
|
||||
gravatar_hash: r.gravatar_hash,
|
||||
is_banned: i8_to_bool(r.is_banned),
|
||||
user_role_slug: r.user_role_slug.clone(),
|
||||
ip_address_creation: r.ip_address_creation.clone(),
|
||||
ip_address_last_login: r.ip_address_last_login.clone(),
|
||||
ip_address_last_update: r.ip_address_last_update.clone(),
|
||||
created_at: r.created_at.clone(),
|
||||
updated_at: r.updated_at.clone(),
|
||||
user_role_slug: r.user_role_slug,
|
||||
ip_address_creation: r.ip_address_creation,
|
||||
ip_address_last_login: r.ip_address_last_login,
|
||||
ip_address_last_update: r.ip_address_last_update,
|
||||
created_at: r.created_at,
|
||||
updated_at: r.updated_at,
|
||||
}
|
||||
})
|
||||
.collect::<Vec<UserForList>>();
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
use actix_http::Error;
|
||||
use actix_http::http::header;
|
||||
use actix_web::cookie::Cookie;
|
||||
use actix_web::HttpResponseBuilder;
|
||||
use actix_web::cookie::Cookie;
|
||||
use actix_web::error::ResponseError;
|
||||
use actix_web::http::StatusCode;
|
||||
use actix_web::web::Path;
|
||||
@@ -10,12 +10,11 @@ use anyhow::anyhow;
|
||||
use chrono::{DateTime, Utc};
|
||||
use crate::AnyhowResult;
|
||||
use crate::database::enums::record_visibility::RecordVisibility;
|
||||
use crate::database::helpers::boolean_converters::i8_to_bool;
|
||||
use crate::database::queries::list_user_badges::UserBadgeForList;
|
||||
use crate::database::queries::list_user_badges::list_user_badges;
|
||||
use crate::http_server::web_utils::response_error_helpers::to_simple_json_error;
|
||||
use crate::server_state::ServerState;
|
||||
use derive_more::{Display, Error};
|
||||
use database_queries::helpers::boolean_converters::i8_to_bool;
|
||||
use log::{info, warn, log};
|
||||
use md5::{Md5, Digest};
|
||||
use regex::Regex;
|
||||
@@ -23,6 +22,7 @@ use sqlx::MySqlPool;
|
||||
use sqlx::error::DatabaseError;
|
||||
use sqlx::error::Error::Database;
|
||||
use sqlx::mysql::MySqlDatabaseError;
|
||||
use std::fmt;
|
||||
use std::sync::Arc;
|
||||
|
||||
// TODO: This is duplicated in query_user_profile
|
||||
@@ -89,7 +89,7 @@ pub struct RawUserProfileRecord {
|
||||
pub created_at: DateTime<Utc>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Display)]
|
||||
#[derive(Debug)]
|
||||
pub enum ProfileError {
|
||||
ServerError,
|
||||
NotFound,
|
||||
@@ -119,6 +119,13 @@ impl ResponseError for ProfileError {
|
||||
}
|
||||
}
|
||||
|
||||
// NB: Not using derive_more::Display since Clion doesn't understand it.
|
||||
impl fmt::Display for ProfileError {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
write!(f, "{:?}", self)
|
||||
}
|
||||
}
|
||||
|
||||
pub async fn get_profile_handler(
|
||||
http_request: HttpRequest,
|
||||
path: Path<GetProfilePathInfo>,
|
||||
@@ -218,24 +225,24 @@ WHERE
|
||||
};
|
||||
|
||||
let profile_for_response = UserProfileRecordForResponse {
|
||||
user_token: profile_record.user_token.clone(),
|
||||
username: profile_record.username.clone(),
|
||||
display_name: profile_record.display_name.clone(),
|
||||
email_gravatar_hash: profile_record.email_gravatar_hash.clone(),
|
||||
profile_markdown: profile_record.profile_markdown.clone(),
|
||||
profile_rendered_html: profile_record.profile_rendered_html.clone(),
|
||||
user_role_slug: profile_record.user_role_slug.clone(),
|
||||
user_token: profile_record.user_token,
|
||||
username: profile_record.username,
|
||||
display_name: profile_record.display_name,
|
||||
email_gravatar_hash: profile_record.email_gravatar_hash,
|
||||
profile_markdown: profile_record.profile_markdown,
|
||||
profile_rendered_html: profile_record.profile_rendered_html,
|
||||
user_role_slug: profile_record.user_role_slug,
|
||||
disable_gravatar: i8_to_bool(profile_record.disable_gravatar),
|
||||
preferred_tts_result_visibility: profile_record.preferred_tts_result_visibility,
|
||||
preferred_w2l_result_visibility: profile_record.preferred_w2l_result_visibility,
|
||||
discord_username: profile_record.discord_username.clone(),
|
||||
twitch_username: profile_record.twitch_username.clone(),
|
||||
twitter_username: profile_record.twitter_username.clone(),
|
||||
patreon_username: profile_record.patreon_username.clone(),
|
||||
github_username: profile_record.github_username.clone(),
|
||||
cashapp_username: profile_record.cashapp_username.clone(),
|
||||
website_url: profile_record.website_url.clone(),
|
||||
created_at: profile_record.created_at.clone(),
|
||||
discord_username: profile_record.discord_username,
|
||||
twitch_username: profile_record.twitch_username,
|
||||
twitter_username: profile_record.twitter_username,
|
||||
patreon_username: profile_record.patreon_username,
|
||||
github_username: profile_record.github_username,
|
||||
cashapp_username: profile_record.cashapp_username,
|
||||
website_url: profile_record.website_url,
|
||||
created_at: profile_record.created_at,
|
||||
maybe_moderator_fields: maybe_mod_fields,
|
||||
badges,
|
||||
};
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
use actix_http::Error;
|
||||
use actix_http::http::header;
|
||||
use actix_web::cookie::Cookie;
|
||||
use actix_web::HttpResponseBuilder;
|
||||
use actix_web::cookie::Cookie;
|
||||
use actix_web::error::ResponseError;
|
||||
use actix_web::http::StatusCode;
|
||||
use actix_web::{Responder, web, HttpResponse, error, HttpRequest};
|
||||
@@ -11,7 +11,7 @@ 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::serialize_as_json_error::serialize_as_json_error;
|
||||
use crate::server_state::ServerState;
|
||||
use derive_more::{Display, Error};
|
||||
use database_queries::helpers::boolean_converters::i8_to_bool;
|
||||
use log::{info, warn, log};
|
||||
use regex::Regex;
|
||||
use sqlx::MySqlPool;
|
||||
@@ -21,7 +21,6 @@ use sqlx::mysql::MySqlDatabaseError;
|
||||
use std::fmt::Formatter;
|
||||
use std::fmt;
|
||||
use std::sync::Arc;
|
||||
use crate::database::helpers::boolean_converters::i8_to_bool;
|
||||
|
||||
#[derive(Deserialize)]
|
||||
pub struct LoginRequest {
|
||||
|
||||
@@ -1,14 +1,13 @@
|
||||
use actix_http::Error;
|
||||
use actix_http::http::header;
|
||||
use actix_web::cookie::Cookie;
|
||||
use actix_web::HttpResponseBuilder;
|
||||
use actix_web::cookie::Cookie;
|
||||
use actix_web::error::ResponseError;
|
||||
use actix_web::http::StatusCode;
|
||||
use actix_web::web::Path;
|
||||
use actix_web::{Responder, web, HttpResponse, error, HttpRequest, HttpMessage};
|
||||
use chrono::{DateTime, Utc};
|
||||
use crate::AnyhowResult;
|
||||
use crate::database::helpers::boolean_converters::nullable_i8_to_optional_bool;
|
||||
use crate::database::queries::query_w2l_template::W2lTemplateRecordForResponse;
|
||||
use crate::database::queries::query_w2l_template::select_w2l_template_by_token;
|
||||
use crate::http_server::web_utils::ip_address::get_request_ip;
|
||||
@@ -16,13 +15,13 @@ use crate::http_server::web_utils::response_error_helpers::to_simple_json_error;
|
||||
use crate::server_state::ServerState;
|
||||
use crate::validations::passwords::validate_passwords;
|
||||
use crate::validations::username::validate_username;
|
||||
use derive_more::{Display, Error};
|
||||
use log::{info, warn, log};
|
||||
use regex::Regex;
|
||||
use sqlx::MySqlPool;
|
||||
use sqlx::error::DatabaseError;
|
||||
use sqlx::error::Error::Database;
|
||||
use sqlx::mysql::MySqlDatabaseError;
|
||||
use std::fmt;
|
||||
use std::sync::Arc;
|
||||
|
||||
/// For the URL PathInfo
|
||||
@@ -37,7 +36,7 @@ pub struct GetW2lTemplateSuccessResponse {
|
||||
pub template: W2lTemplateRecordForResponse,
|
||||
}
|
||||
|
||||
#[derive(Debug, Display)]
|
||||
#[derive(Debug)]
|
||||
pub enum GetW2lTemplateError {
|
||||
ServerError,
|
||||
NotFound,
|
||||
@@ -61,6 +60,13 @@ impl ResponseError for GetW2lTemplateError {
|
||||
}
|
||||
}
|
||||
|
||||
// NB: Not using derive_more::Display since Clion doesn't understand it.
|
||||
impl fmt::Display for GetW2lTemplateError {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
write!(f, "{:?}", self)
|
||||
}
|
||||
}
|
||||
|
||||
pub async fn get_w2l_template_handler(
|
||||
http_request: HttpRequest,
|
||||
path: Path<GetW2lTemplatePathInfo>,
|
||||
|
||||
@@ -2,8 +2,8 @@ use actix_web::HttpRequest;
|
||||
use anyhow::anyhow;
|
||||
use crate::AnyhowResult;
|
||||
use crate::database::enums::record_visibility::RecordVisibility;
|
||||
use crate::database::helpers::boolean_converters::{i8_to_bool, nullable_i8_to_optional_bool};
|
||||
use crate::http_server::web_utils::cookie_manager::CookieManager;
|
||||
use database_queries::helpers::boolean_converters::{nullable_i8_to_optional_bool, i8_to_bool};
|
||||
use log::{info, warn};
|
||||
use sqlx::MySqlPool;
|
||||
use sqlx::error::Error::RowNotFound;
|
||||
@@ -235,17 +235,17 @@ WHERE user_sessions.token = ?
|
||||
match maybe_user_record {
|
||||
Ok(raw_user_record) => {
|
||||
let result_user_record = SessionUserRecord {
|
||||
user_token: raw_user_record.user_token.clone(),
|
||||
username: raw_user_record.username.clone(),
|
||||
display_name: raw_user_record.display_name.clone(),
|
||||
email_address: raw_user_record.email_address.clone(),
|
||||
user_token: raw_user_record.user_token,
|
||||
username: raw_user_record.username,
|
||||
display_name: raw_user_record.display_name,
|
||||
email_address: raw_user_record.email_address,
|
||||
email_confirmed: i8_to_bool(raw_user_record.email_confirmed),
|
||||
email_gravatar_hash: raw_user_record.email_gravatar_hash.clone(),
|
||||
email_gravatar_hash: raw_user_record.email_gravatar_hash,
|
||||
// Preference
|
||||
disable_gravatar: i8_to_bool(raw_user_record.disable_gravatar),
|
||||
auto_play_audio_preference: nullable_i8_to_optional_bool(raw_user_record.auto_play_audio_preference),
|
||||
auto_play_video_preference: nullable_i8_to_optional_bool(raw_user_record.auto_play_video_preference),
|
||||
user_role_slug: raw_user_record.user_role_slug.clone(),
|
||||
user_role_slug: raw_user_record.user_role_slug,
|
||||
preferred_tts_result_visibility: raw_user_record.preferred_tts_result_visibility,
|
||||
preferred_w2l_result_visibility: raw_user_record.preferred_w2l_result_visibility,
|
||||
|
||||
|
||||
Reference in new issue
Block a user