Goodbye, 'EntityVisibility'

This commit is contained in:
Brandon Thomas committed 2023-01-11 00:33:39 -05:00
1 parent 68f2e46540
commit 66bb76e60f
20 files changed
+46 -110

No files matched your search

Generated
+2
View File
@@ -1624,6 +1624,7 @@ dependencies = [
"database_queries",
"dotenv",
"easyenv",
"enums",
"google_drive_common",
"hostname",
"hyper 0.14.14",
@@ -5569,6 +5570,7 @@ dependencies = [
"container_common",
"database_queries",
"dotenv",
"enums",
"hmac 0.10.1",
"http_server_common",
"jwt",
@@ -4,7 +4,7 @@ use container_common::anyhow_result::AnyhowResult;
use crate::column_types::job_status::JobStatus;
use crate::queries::generic_download::job::_keys::GenericDownloadJobId;
use crate::tokens::Tokens;
use reusable_types::db::enums::entity_visibility::EntityVisibility;
use enums::core::visibility::Visibility;
use reusable_types::db::enums::generic_download_type::GenericDownloadType;
use sqlx::MySqlPool;
use std::path::Path;
@@ -18,7 +18,7 @@ pub struct AvailableDownloadJob {
pub creator_user_token: String,
pub creator_ip_address: String,
pub creator_set_visibility: EntityVisibility,
pub creator_set_visibility: Visibility,
pub download_type: GenericDownloadType,
pub download_url: String,
@@ -45,7 +45,7 @@ SELECT
creator_user_token,
creator_ip_address,
creator_set_visibility as `creator_set_visibility: reusable_types::db::enums::entity_visibility::EntityVisibility`,
creator_set_visibility as `creator_set_visibility: enums::core::visibility::Visibility`,
download_type as `download_type: reusable_types::db::enums::generic_download_type::GenericDownloadType`,
download_url,
@@ -108,7 +108,7 @@ struct AvailableDownloadJobRawInternal {
pub creator_user_token: String,
pub creator_ip_address: String,
pub creator_set_visibility: EntityVisibility,
pub creator_set_visibility: Visibility,
pub download_type: GenericDownloadType,
pub download_url: String,
@@ -2,7 +2,6 @@ use anyhow::anyhow;
use chrono::{DateTime, Utc};
use container_common::anyhow_result::AnyhowResult;
use log::warn;
use reusable_types::db::enums::entity_visibility::EntityVisibility;
use reusable_types::db::enums::generic_download_type::GenericDownloadType;
use sqlx::MySqlPool;
use tokens::jobs::download::DownloadJobToken;
@@ -1,6 +1,6 @@
use anyhow::anyhow;
use container_common::anyhow_result::AnyhowResult;
use reusable_types::db::enums::entity_visibility::EntityVisibility;
use enums::core::visibility::Visibility;
use reusable_types::db::enums::generic_download_type::GenericDownloadType;
use sqlx::MySqlPool;
use tokens::jobs::download::DownloadJobToken;
@@ -13,7 +13,7 @@ pub struct Args <'a> {
pub title: &'a str,
pub creator_user_token: &'a str,
pub creator_ip_address: &'a str,
pub creator_set_visibility: EntityVisibility,
pub creator_set_visibility: Visibility,
pub mysql_pool: &'a MySqlPool,
}
@@ -4,7 +4,7 @@ use container_common::anyhow_result::AnyhowResult;
use crate::column_types::job_status::JobStatus;
use crate::helpers::boolean_converters::i8_to_bool;
use crate::queries::generic_inference::job::_keys::GenericInferenceJobId;
use reusable_types::db::enums::entity_visibility::EntityVisibility;
use enums::core::visibility::Visibility;
use reusable_types::db::enums::generic_inference_type::GenericInferenceType;
use sqlx::MySqlPool;
use std::path::Path;
@@ -25,7 +25,7 @@ pub struct AvailableInferenceJob {
// User information to propagate downstream
pub maybe_creator_user_token: Option<String>,
pub creator_ip_address: String,
pub creator_set_visibility: EntityVisibility,
pub creator_set_visibility: Visibility,
// Job information
pub status: JobStatus,
@@ -58,7 +58,7 @@ SELECT
maybe_creator_user_token,
creator_ip_address,
creator_set_visibility as `creator_set_visibility: reusable_types::db::enums::entity_visibility::EntityVisibility`,
creator_set_visibility as `creator_set_visibility: enums::core::visibility::Visibility`,
status as `status: crate::column_types::job_status::JobStatus`,
@@ -135,7 +135,7 @@ struct AvailableInferenceJobRawInternal {
// User information to propagate downstream
pub maybe_creator_user_token: Option<String>,
pub creator_ip_address: String,
pub creator_set_visibility: EntityVisibility,
pub creator_set_visibility: Visibility,
// Job information
pub status: JobStatus,
@@ -1,6 +1,6 @@
use anyhow::anyhow;
use container_common::anyhow_result::AnyhowResult;
use reusable_types::db::enums::entity_visibility::EntityVisibility;
use enums::core::visibility::Visibility;
use reusable_types::db::enums::generic_inference_type::GenericInferenceType;
use sqlx::MySqlPool;
use tokens::jobs::inference::InferenceJobToken;
@@ -16,7 +16,7 @@ pub struct Args <'a> {
pub maybe_creator_user_token: Option<&'a str>,
pub creator_ip_address: &'a str,
pub creator_set_visibility: EntityVisibility,
pub creator_set_visibility: Visibility,
pub mysql_pool: &'a MySqlPool,
}
@@ -3,7 +3,7 @@ use chrono::Utc;
use container_common::anyhow_result::AnyhowResult;
use crate::queries::generic_download::job::list_available_generic_download_jobs::AvailableDownloadJob;
use crate::tokens::Tokens;
use reusable_types::db::enums::entity_visibility::EntityVisibility;
use enums::core::visibility::Visibility;
use sqlx::MySqlPool;
use std::path::Path;
@@ -16,7 +16,7 @@ pub struct Args<'a, P: AsRef<Path>> {
pub creator_user_token: &'a str,
pub creator_ip_address: &'a str,
pub creator_set_visibility: EntityVisibility,
pub creator_set_visibility: Visibility,
pub private_bucket_hash: &'a str,
pub private_bucket_object_name: P,
@@ -2,8 +2,8 @@ use anyhow::anyhow;
use chrono::{DateTime, Utc};
use container_common::anyhow_result::AnyhowResult;
use crate::helpers::boolean_converters::i8_to_bool;
use enums::core::visibility::Visibility;
use log::{info, warn, log};
use reusable_types::db::enums::entity_visibility::EntityVisibility;
use sqlx::error::DatabaseError;
use sqlx::error::Error::Database;
use sqlx::mysql::MySqlDatabaseError;
@@ -38,8 +38,8 @@ pub struct UserProfileResult {
pub website_url: Option<String>,
// Preferences; NB: included for get_profile_handler legacy reasons
pub preferred_tts_result_visibility: EntityVisibility,
pub preferred_w2l_result_visibility: EntityVisibility,
pub preferred_tts_result_visibility: Visibility,
pub preferred_w2l_result_visibility: Visibility,
pub created_at: DateTime<Utc>,
@@ -75,8 +75,8 @@ struct RawUserProfileRecord {
created_at: DateTime<Utc>,
// Preferences; NB: included for get_profile_handler legacy reasons
preferred_tts_result_visibility: EntityVisibility,
preferred_w2l_result_visibility: EntityVisibility,
preferred_tts_result_visibility: Visibility,
preferred_w2l_result_visibility: Visibility,
// Mod fields
is_banned: i8,
@@ -109,8 +109,8 @@ SELECT
profile_rendered_html,
user_role_slug,
disable_gravatar,
preferred_tts_result_visibility as `preferred_tts_result_visibility: reusable_types::db::enums::entity_visibility::EntityVisibility`,
preferred_w2l_result_visibility as `preferred_w2l_result_visibility: reusable_types::db::enums::entity_visibility::EntityVisibility`,
preferred_tts_result_visibility as `preferred_tts_result_visibility: enums::core::visibility::Visibility`,
preferred_w2l_result_visibility as `preferred_w2l_result_visibility: enums::core::visibility::Visibility`,
discord_username,
twitch_username,
twitter_username,
@@ -7,8 +7,8 @@ use anyhow::anyhow;
use chrono::{DateTime, Utc};
use container_common::anyhow_result::AnyhowResult;
use crate::helpers::boolean_converters::i8_to_bool;
use enums::core::visibility::Visibility;
use log::warn;
use reusable_types::db::enums::entity_visibility::EntityVisibility;
use reusable_types::db::enums::vocoder_type::VocoderType;
use sqlx::MySqlPool;
@@ -31,7 +31,7 @@ pub struct VocoderModelRecord {
pub creator_display_name: String,
pub creator_gravatar_hash: String,
pub creator_set_visibility: EntityVisibility,
pub creator_set_visibility: Visibility,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
@@ -137,7 +137,7 @@ SELECT
vocoder.is_mod_disabled_from_author_use,
vocoder.is_mod_author_editing_locked,
vocoder.creator_set_visibility as `creator_set_visibility: reusable_types::db::enums::entity_visibility::EntityVisibility`,
vocoder.creator_set_visibility as `creator_set_visibility: enums::core::visibility::Visibility`,
vocoder.created_at,
vocoder.updated_at,
@@ -185,7 +185,7 @@ SELECT
vocoder.is_mod_disabled_from_author_use,
vocoder.is_mod_author_editing_locked,
vocoder.creator_set_visibility as `creator_set_visibility: reusable_types::db::enums::entity_visibility::EntityVisibility`,
vocoder.creator_set_visibility as `creator_set_visibility: enums::core::visibility::Visibility`,
vocoder.created_at,
vocoder.updated_at,
@@ -224,7 +224,7 @@ struct InternalVocoderModelRecordRaw {
pub creator_display_name: String,
pub creator_gravatar_hash: String,
pub creator_set_visibility: EntityVisibility,
pub creator_set_visibility: Visibility,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
@@ -6,7 +6,7 @@
use anyhow::anyhow;
use container_common::anyhow_result::AnyhowResult;
use crate::tokens::Tokens;
use reusable_types::db::enums::entity_visibility::EntityVisibility;
use enums::core::visibility::Visibility;
use reusable_types::db::enums::vocoder_type::VocoderType;
use sqlx::MySqlPool;
use std::path::Path;
@@ -22,7 +22,7 @@ pub struct Args<'a, P: AsRef<Path>> {
pub creator_user_token: &'a str,
pub creator_ip_address: &'a str,
pub creator_set_visibility: EntityVisibility,
pub creator_set_visibility: Visibility,
pub private_bucket_hash: &'a str,
pub private_bucket_object_name: P,
@@ -1,7 +1,7 @@
use anyhow::anyhow;
use chrono::Utc;
use container_common::anyhow_result::AnyhowResult;
use reusable_types::db::enums::entity_visibility::EntityVisibility;
use enums::core::visibility::Visibility;
use sqlx::MySqlPool;
use std::path::Path;
use tokens::voice_conversion::model::VoiceConversionModelToken;
@@ -15,7 +15,7 @@ pub struct Args<'a, P: AsRef<Path>> {
pub creator_user_token: &'a str,
pub creator_ip_address: &'a str,
pub creator_set_visibility: EntityVisibility,
pub creator_set_visibility: Visibility,
pub private_bucket_hash: &'a str,
pub private_bucket_object_name: P,
+1
View File
@@ -17,6 +17,7 @@ path = "src/lib.rs"
# Internal
container_common = { path = "../../lib/container_common" }
database_queries = { path = "../../lib/database_queries" }
enums = { path = "../../types/enums" }
http_server_common = { path = "../../lib/http_server_common" }
reusable_types = { path = "../../types/reusable_types" }
tokens = { path = "../../types/tokens" }
@@ -12,11 +12,11 @@ use crate::utils::session_checker::SessionChecker;
use database_queries::queries::users::user_badges::list_user_badges::UserBadgeForList;
use database_queries::queries::users::user_badges::list_user_badges::list_user_badges;
use database_queries::queries::users::user_profiles::get_user_profile_by_username::get_user_profile_by_username_from_connection;
use enums::core::visibility::Visibility;
use http_server_common::request::get_request_header_optional::get_request_header_optional;
use http_server_common::response::serialize_as_json_error::serialize_as_json_error;
use http_server_common::util::timer::MultiBenchmarkingTimer;
use log::warn;
use reusable_types::db::enums::entity_visibility::EntityVisibility;
use sqlx::MySqlPool;
use std::fmt;
use tokens::users::user::UserToken;
@@ -34,8 +34,8 @@ pub struct UserProfileRecordForResponse {
pub profile_rendered_html: String,
pub user_role_slug: String,
pub disable_gravatar: bool,
pub preferred_tts_result_visibility: EntityVisibility,
pub preferred_w2l_result_visibility: EntityVisibility,
pub preferred_tts_result_visibility: Visibility,
pub preferred_w2l_result_visibility: Visibility,
pub discord_username: Option<String>,
pub twitch_username: Option<String>,
pub twitter_username: Option<String>,
@@ -18,6 +18,7 @@ path = "src/main.rs"
config = { path = "../../../lib/config" }
container_common = { path = "../../../lib/container_common" }
database_queries = { path = "../../../lib/database_queries" }
enums = { path = "../../../types/enums" }
google_drive_common = { path = "../../../lib/google_drive_common" }
jobs_common = { path = "../../../lib/jobs_common" }
reusable_types = { path = "../../../types/reusable_types" }
@@ -8,9 +8,9 @@ use crate::JobState;
use crate::job_steps::job_results::JobResults;
use database_queries::queries::generic_download::job::list_available_generic_download_jobs::AvailableDownloadJob;
use database_queries::queries::voice_conversion::voice_conversion_models::insert_voice_conversion_model_from_download_job::{Args, insert_voice_conversion_model_from_download_job};
use enums::core::visibility::Visibility;
use jobs_common::redis_job_status_logger::RedisJobStatusLogger;
use log::{info, warn};
use reusable_types::db::enums::entity_visibility::EntityVisibility;
use std::fs::File;
use std::io::Read;
use std::path::PathBuf;
@@ -101,7 +101,7 @@ pub async fn process_softvc_model<'a, 'b>(
file_size_bytes: file_metadata.file_size_bytes,
creator_user_token: &job.creator_user_token,
creator_ip_address: &job.creator_ip_address,
creator_set_visibility: EntityVisibility::Public, // TODO: All models default to public at start
creator_set_visibility: Visibility::Public, // TODO: All models default to public at start
private_bucket_hash: &private_bucket_hash,
private_bucket_object_name: &model_bucket_path,
mysql_pool: &job_state.mysql_pool,
@@ -9,9 +9,9 @@ use crate::job_steps::job_results::JobResults;
use database_queries::queries::generic_download::job::list_available_generic_download_jobs::AvailableDownloadJob;
use database_queries::queries::tts::tts_models::insert_tts_model_from_download_job::insert_tts_model_from_download_job;
use database_queries::queries::tts::tts_models::insert_tts_model_from_download_job;
use enums::core::visibility::Visibility;
use jobs_common::redis_job_status_logger::RedisJobStatusLogger;
use log::{info, warn};
use reusable_types::db::enums::entity_visibility::EntityVisibility;
use std::fs::File;
use std::io::Read;
use std::path::PathBuf;
@@ -103,7 +103,7 @@ pub async fn process_tacotron_model<'a, 'b>(
file_size_bytes: file_metadata.file_size_bytes,
creator_user_token: &job.creator_user_token,
creator_ip_address: &job.creator_ip_address,
creator_set_visibility: EntityVisibility::Public, // TODO: All models default to public at start
creator_set_visibility: Visibility::Public, // TODO: All models default to public at start
private_bucket_hash: &private_bucket_hash,
private_bucket_object_name: &model_bucket_path,
mysql_pool: &job_state.mysql_pool,
@@ -12,11 +12,11 @@ use crate::validations::model_uploads::validate_model_title;
use crate::validations::validate_idempotency_token_format::validate_idempotency_token_format;
use database_queries::queries::generic_download::web::insert_generic_download_job::{Args, insert_generic_download_job};
use database_queries::tokens::Tokens;
use enums::core::visibility::Visibility;
use http_server_common::request::get_request_ip::get_request_ip;
use http_server_common::response::serialize_as_json_error::serialize_as_json_error;
use log::{info, warn, log};
use regex::Regex;
use reusable_types::db::enums::entity_visibility::EntityVisibility;
use reusable_types::db::enums::generic_download_type::GenericDownloadType;
use sqlx::error::DatabaseError;
use sqlx::error::Error::Database;
@@ -35,7 +35,7 @@ pub struct EnqueueGenericDownloadRequest {
/// Not all upload types will have an associated visibility, so supplying this is optional.
/// If an upload type supports it and it is not supplied, assume a reasonable default or user
/// setting.
creator_set_visibility: Option<EntityVisibility>,
creator_set_visibility: Option<Visibility>,
}
#[derive(Serialize)]
@@ -107,7 +107,7 @@ pub async fn enqueue_generic_download_handler(
let download_url = request.download_url.trim().to_string();
let creator_set_visibility = request.creator_set_visibility
.unwrap_or(EntityVisibility::Public);
.unwrap_or(Visibility::Public);
if let Err(reason) = validate_idempotency_token_format(&uuid) {
return Err(EnqueueGenericDownloadError::BadInput(reason));
@@ -11,8 +11,8 @@ use chrono::{DateTime, Utc};
use crate::http_server::web_utils::response_error_helpers::to_simple_json_error;
use crate::server_state::ServerState;
use database_queries::queries::vocoder::get_vocoder_model::get_vocoder_model_by_token;
use enums::core::visibility::Visibility;
use log::warn;
use reusable_types::db::enums::entity_visibility::EntityVisibility;
use reusable_types::db::enums::vocoder_type::VocoderType;
use std::fmt;
use std::sync::Arc;
@@ -49,7 +49,7 @@ pub struct Vocoder {
pub creator_display_name: String,
pub creator_gravatar_hash: String,
pub creator_set_visibility: EntityVisibility,
pub creator_set_visibility: Visibility,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
@@ -1,66 +0,0 @@
/// Used in various database tables (as enums! careful!) and the HTTP API to convey
/// how the associated entity should be made visible to the public.
///
/// DO NOT CHANGE VALUES WITHOUT A MIGRATION STRATEGY.
#[derive(Clone, Copy, Eq, PartialEq, Debug, Deserialize, Serialize, sqlx::Type)]
#[serde(rename_all = "lowercase")]
#[sqlx(rename_all = "lowercase")]
pub enum EntityVisibility {
/// Public entities are able to be listed in public lists.
/// It does not mean that they necessarily will be (eg. they could be "mod unapproved" or deleted).
Public,
/// Hidden entities are not shown in public lists, but the URL to them may be given out freely.
/// They are available to non-logged-in users as long as they have the URL.
Hidden,
/// Private entities should only be available to the creator, a list of approved users, and
/// website moderation staff.
Private,
}
/// NB: Legacy API for older code.
impl EntityVisibility {
pub fn to_str(&self) -> &'static str {
match self {
Self::Public => "public",
Self::Hidden => "hidden",
Self::Private => "private",
}
}
pub fn from_str(value: &str) -> Result<Self, String> {
match value {
"public" => Ok(Self::Public),
"hidden" => Ok(Self::Hidden),
"private" => Ok(Self::Private),
_ => Err(format!("invalid value: {:?}", value)),
}
}
}
#[cfg(test)]
mod tests {
use crate::db::enums::entity_visibility::EntityVisibility;
use crate::test_helpers::assert_serialization;
#[test]
fn test_serialization() {
assert_serialization(EntityVisibility::Public, "public");
assert_serialization(EntityVisibility::Hidden, "hidden");
assert_serialization(EntityVisibility::Private, "private");
}
#[test]
fn test_to_str() {
assert_eq!(EntityVisibility::Public.to_str(), "public");
assert_eq!(EntityVisibility::Hidden.to_str(), "hidden");
assert_eq!(EntityVisibility::Private.to_str(), "private");
}
#[test]
fn test_from_str() {
assert_eq!(EntityVisibility::from_str("public").unwrap(), EntityVisibility::Public);
assert_eq!(EntityVisibility::from_str("hidden").unwrap(), EntityVisibility::Hidden);
assert_eq!(EntityVisibility::from_str("private").unwrap(), EntityVisibility::Private);
assert!(EntityVisibility::from_str("foo").is_err());
}
}
@@ -1,7 +1,6 @@
//! This is meant to handle `enum` or `enum`-like columns in the database.
//! These are not Rust-like enums (sum types) that can have internal payloads.
pub mod entity_visibility;
pub mod generic_download_type;
pub mod generic_inference_type;
pub mod media_upload_type;