diff --git a/crates/schema/public/enums_api/src/common/job_status_plus.rs b/crates/schema/public/enums_api/src/common/job_status_plus.rs index 281b716d73..1f0ecabd89 100644 --- a/crates/schema/public/enums_api/src/common/job_status_plus.rs +++ b/crates/schema/public/enums_api/src/common/job_status_plus.rs @@ -37,6 +37,20 @@ impl JobStatusPlus { Self::CancelledBySystem => "cancelled_by_system", } } + + pub fn from_str(value: &str) -> Result { + match value { + "pending" => Ok(Self::Pending), + "started" => Ok(Self::Started), + "complete_success" => Ok(Self::CompleteSuccess), + "complete_failure" => Ok(Self::CompleteFailure), + "attempt_failed" => Ok(Self::AttemptFailed), + "dead" => Ok(Self::Dead), + "cancelled_by_user" => Ok(Self::CancelledByUser), + "cancelled_by_system" => Ok(Self::CancelledBySystem), + _ => Err(format!("invalid JobStatusPlus: {:?}", value)), + } + } } #[cfg(test)] diff --git a/crates/schema/public/enums_api/src/common/visibility.rs b/crates/schema/public/enums_api/src/common/visibility.rs index fd783e13d8..a1ae0815a6 100644 --- a/crates/schema/public/enums_api/src/common/visibility.rs +++ b/crates/schema/public/enums_api/src/common/visibility.rs @@ -32,6 +32,31 @@ pub enum Visibility { // have not yet been migrated to this scheme. } +impl Default for Visibility { + fn default() -> Self { + Self::Public + } +} + +impl Visibility { + pub const fn to_str(&self) -> &'static str { + match self { + Self::Public => "public", + Self::Hidden => "hidden", + Self::Private => "private", + } + } + + pub fn from_str(value: &str) -> Result { + match value { + "public" => Ok(Self::Public), + "hidden" => Ok(Self::Hidden), + "private" => Ok(Self::Private), + _ => Err(format!("invalid Visibility: {:?}", value)), + } + } +} + #[cfg(test)] mod tests { use super::Visibility; diff --git a/crates/service/web/storyteller_web/src/docs/api_doc.rs b/crates/service/web/storyteller_web/src/docs/api_doc.rs index 595e9db942..e69b59eefc 100644 --- a/crates/service/web/storyteller_web/src/docs/api_doc.rs +++ b/crates/service/web/storyteller_web/src/docs/api_doc.rs @@ -191,31 +191,31 @@ use artcraft_api_defs::prompts::create_prompt::CreatePromptResponse; use billing_component::stripe::http_endpoints::checkout::create::stripe_create_checkout_session_error::CreateCheckoutSessionError; use billing_component::stripe::http_endpoints::checkout::create::stripe_create_checkout_session_json_handler::*; use billing_component::users::http_endpoints::list_active_user_subscriptions_handler::*; -use enums_db::by_table::beta_keys::beta_key_product::BetaKeyProduct; -use enums_db::by_table::comments::comment_entity_type::CommentEntityType; -use enums_db::by_table::featured_items::featured_item_entity_type::FeaturedItemEntityType; +use enums_api::by_table::beta_keys::beta_key_product::BetaKeyProduct; +use enums_api::by_table::comments::comment_entity_type::CommentEntityType; +use enums_api::by_table::featured_items::featured_item_entity_type::FeaturedItemEntityType; use enums_api::api_safe::by_table::generic_inference_jobs::frontend_failure_category_for_old_clients::FrontendFailureCategoryForOldClients; use enums_api::api_safe::by_table::generic_inference_jobs::frontend_failure_category_for_api_clients::FrontendFailureCategoryForApiClients; -use enums_db::by_table::generic_inference_jobs::inference_category::InferenceCategory; -use enums_db::by_table::media_files::media_file_animation_type::MediaFileAnimationType; -use enums_db::by_table::media_files::media_file_class::MediaFileClass; -use enums_db::by_table::media_files::media_file_engine_category::MediaFileEngineCategory; -use enums_db::by_table::media_files::media_file_origin_category::MediaFileOriginCategory; -use enums_db::by_table::media_files::media_file_origin_product_category::MediaFileOriginProductCategory; -use enums_db::by_table::media_files::media_file_subtype::MediaFileSubtype; -use enums_db::by_table::media_files::media_file_type::MediaFileType; -use enums_db::by_table::model_weights::{weights_category::WeightsCategory, weights_types::WeightsType}; -use enums_db::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType; -use enums_db::by_table::prompts::prompt_type::PromptType; -use enums_db::by_table::user_bookmarks::user_bookmark_entity_type::UserBookmarkEntityType; -use enums_db::by_table::user_ratings::entity_type::UserRatingEntityType; -use enums_db::by_table::user_ratings::rating_value::UserRatingValue; -use enums_db::by_table::users::user_feature_flag::UserFeatureFlag; -use enums_db::common::generation::generation_provider::GenerationProvider; -use enums_db::common::job_status_plus::JobStatusPlus; -use enums_db::common::model_type::ModelType; -use enums_db::common::visibility::Visibility; -use enums_db::no_table::style_transfer::style_transfer_name::StyleTransferName; +use enums_api::by_table::generic_inference_jobs::inference_category::InferenceCategory; +use enums_api::by_table::media_files::media_file_animation_type::MediaFileAnimationType; +use enums_api::by_table::media_files::media_file_class::MediaFileClass; +use enums_api::by_table::media_files::media_file_engine_category::MediaFileEngineCategory; +use enums_api::by_table::media_files::media_file_origin_category::MediaFileOriginCategory; +use enums_api::by_table::media_files::media_file_origin_product_category::MediaFileOriginProductCategory; +use enums_api::by_table::media_files::media_file_subtype::MediaFileSubtype; +use enums_api::by_table::media_files::media_file_type::MediaFileType; +use enums_api::by_table::model_weights::{weights_category::WeightsCategory, weights_types::WeightsType}; +use enums_api::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType; +use enums_api::by_table::prompts::prompt_type::PromptType; +use enums_api::by_table::user_bookmarks::user_bookmark_entity_type::UserBookmarkEntityType; +use enums_api::by_table::user_ratings::entity_type::UserRatingEntityType; +use enums_api::by_table::user_ratings::rating_value::UserRatingValue; +use enums_api::by_table::users::user_feature_flag::UserFeatureFlag; +use enums_api::common::generation::generation_provider::GenerationProvider; +use enums_api::common::job_status_plus::JobStatusPlus; +use enums_api::common::model_type::ModelType; +use enums_api::common::visibility::Visibility; +use enums_api::no_table::style_transfer::style_transfer_name::StyleTransferName; use enums_public::by_table::media_files::public_media_file_model_type::PublicMediaFileModelType; use enums_public::by_table::model_weights::public_weights_types::PublicWeightsType; use tokens::tokens::batch_generations::*; diff --git a/crates/service/web/storyteller_web/src/http_server/common_requests/auto_product_category.rs b/crates/service/web/storyteller_web/src/http_server/common_requests/auto_product_category.rs index a1cdf67aef..a062ae3d32 100644 --- a/crates/service/web/storyteller_web/src/http_server/common_requests/auto_product_category.rs +++ b/crates/service/web/storyteller_web/src/http_server/common_requests/auto_product_category.rs @@ -2,7 +2,7 @@ use std::collections::HashSet; use utoipa::ToSchema; -use enums_db::by_table::media_files::media_file_origin_product_category::MediaFileOriginProductCategory; +use enums_api::by_table::media_files::media_file_origin_product_category::MediaFileOriginProductCategory; /// AutoProductCategory can be used in APIs to auto-expand to multiple product categories, /// deprecated product categories, etc. diff --git a/crates/service/web/storyteller_web/src/http_server/common_responses/media_file_origin_details.rs b/crates/service/web/storyteller_web/src/http_server/common_responses/media_file_origin_details.rs index 1a2c9876fa..749d6c6f2e 100644 --- a/crates/service/web/storyteller_web/src/http_server/common_responses/media_file_origin_details.rs +++ b/crates/service/web/storyteller_web/src/http_server/common_responses/media_file_origin_details.rs @@ -1,8 +1,8 @@ use utoipa::ToSchema; -use enums_db::by_table::media_files::media_file_origin_category::MediaFileOriginCategory; -use enums_db::by_table::media_files::media_file_origin_model_type::MediaFileOriginModelType; -use enums_db::by_table::media_files::media_file_origin_product_category::MediaFileOriginProductCategory; +use enums_api::by_table::media_files::media_file_origin_category::MediaFileOriginCategory; +use enums_api::by_table::media_files::media_file_origin_model_type::MediaFileOriginModelType; +use enums_api::by_table::media_files::media_file_origin_product_category::MediaFileOriginProductCategory; use enums_public::by_table::media_files::public_media_file_model_type::PublicMediaFileModelType; use tokens::tokens::model_weights::ModelWeightToken; @@ -53,14 +53,16 @@ impl MediaFileOriginDetails { let maybe_model = match (maybe_model_type, maybe_model_token, maybe_model_title) { (Some(model_type), Some(model_token), Some(model_title)) => { Some(MediaFileModelDetails::ModelWeight { - model_type: PublicMediaFileModelType::from_enum(model_type), + model_type: enums_convert::by_table::media_files::media_file_origin_model_type::media_file_origin_model_type_to_api(&PublicMediaFileModelType::from_enum(model_type)), + token: model_token, title: model_title, }) }, (Some(model_type), None, None) => { Some(MediaFileModelDetails::SystemModel { - model_type: PublicMediaFileModelType::from_enum(model_type), + model_type: enums_convert::by_table::media_files::media_file_origin_model_type::media_file_origin_model_type_to_api(&PublicMediaFileModelType::from_enum(model_type)), + }) }, _ => None, diff --git a/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/conversion/enqueue_fbx_to_gltf_handler.rs b/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/conversion/enqueue_fbx_to_gltf_handler.rs index 99ee2cb1b2..549a5c3f60 100644 --- a/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/conversion/enqueue_fbx_to_gltf_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/conversion/enqueue_fbx_to_gltf_handler.rs @@ -12,8 +12,11 @@ use serde::Serialize; use utoipa::ToSchema; use enums_db::by_table::generic_inference_jobs::inference_category::InferenceCategory; +use enums_api::by_table::generic_inference_jobs::inference_category::InferenceCategory as ApiInferenceCategory; use enums_db::by_table::generic_inference_jobs::inference_job_type::InferenceJobType; +use enums_api::by_table::generic_inference_jobs::inference_job_type::InferenceJobType as ApiInferenceJobType; use enums_db::by_table::generic_inference_jobs::inference_model_type::InferenceModelType; +use enums_api::by_table::generic_inference_jobs::inference_model_type::InferenceModelType as ApiInferenceModelType; use enums_db::common::visibility::Visibility; use http_server_common::request::get_request_header_optional::get_request_header_optional; use http_server_common::request::get_request_ip::get_request_ip; @@ -193,7 +196,8 @@ pub async fn enqueue_fbx_to_gltf_handler( job_type: InferenceJobType::ConvertFbxToGltf, maybe_product_category: None, // This is not a product inference_category: InferenceCategory::FormatConversion, - maybe_model_type: Some(InferenceModelType::ConvertFbxToGltf), + maybe_model_type: Some(enums_convert::by_table::generic_inference_jobs::inference_model_type::inference_model_type_to_api(&InferenceModelType::ConvertFbxToGltf)), + maybe_model_token: None, maybe_input_source_token: Some(&request.media_file_token.as_str()), maybe_input_source_token_type: None, @@ -208,7 +212,8 @@ pub async fn enqueue_fbx_to_gltf_handler( maybe_creator_user_token: maybe_user_token.as_ref(), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: Visibility::Public, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&Visibility::Public), + priority_level, requires_keepalive: true, is_debug_request, diff --git a/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/conversion/enqueue_render_engine_scene_to_video_handler.rs b/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/conversion/enqueue_render_engine_scene_to_video_handler.rs index 424c975a6b..9f5f03afaa 100644 --- a/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/conversion/enqueue_render_engine_scene_to_video_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/conversion/enqueue_render_engine_scene_to_video_handler.rs @@ -13,9 +13,13 @@ use serde::Serialize; use utoipa::ToSchema; use enums_db::by_table::generic_inference_jobs::inference_category::InferenceCategory; +use enums_api::by_table::generic_inference_jobs::inference_category::InferenceCategory as ApiInferenceCategory; use enums_db::by_table::generic_inference_jobs::inference_input_source_token_type::InferenceInputSourceTokenType; +use enums_api::by_table::generic_inference_jobs::inference_input_source_token_type::InferenceInputSourceTokenType as ApiInferenceInputSourceTokenType; use enums_db::by_table::generic_inference_jobs::inference_job_type::InferenceJobType; +use enums_api::by_table::generic_inference_jobs::inference_job_type::InferenceJobType as ApiInferenceJobType; use enums_db::by_table::generic_inference_jobs::inference_model_type::InferenceModelType; +use enums_api::by_table::generic_inference_jobs::inference_model_type::InferenceModelType as ApiInferenceModelType; use enums_db::common::visibility::Visibility; use http_server_common::request::get_request_header_optional::get_request_header_optional; use http_server_common::request::get_request_ip::get_request_ip; @@ -251,10 +255,12 @@ pub async fn enqueue_render_engine_scene_to_video_handler( job_type: InferenceJobType::BevyToWorkflow, maybe_product_category: None, // This is not a product anymore inference_category: InferenceCategory::ConvertBvhToWorkflow, - maybe_model_type: Some(InferenceModelType::BvhToWorkflow), + maybe_model_type: Some(enums_convert::by_table::generic_inference_jobs::inference_model_type::inference_model_type_to_api(&InferenceModelType::BvhToWorkflow)), + maybe_model_token: None, maybe_input_source_token: Some(&request.media_file_token.as_str()), - maybe_input_source_token_type: Some(InferenceInputSourceTokenType::MediaFile), + maybe_input_source_token_type: Some(enums_convert::by_table::generic_inference_jobs::inference_input_source_token_type::inference_input_source_token_type_to_api(&InferenceInputSourceTokenType::MediaFile)), + maybe_download_url: None, maybe_cover_image_media_file_token: None, maybe_raw_inference_text: None, @@ -266,7 +272,8 @@ pub async fn enqueue_render_engine_scene_to_video_handler( maybe_creator_user_token: maybe_user_token.as_ref(), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: Visibility::Public, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&Visibility::Public), + priority_level, requires_keepalive: true, is_debug_request, diff --git a/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/engine/create_scene_handler.rs b/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/engine/create_scene_handler.rs index 4563de90a7..4ee6ae9735 100644 --- a/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/engine/create_scene_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/engine/create_scene_handler.rs @@ -8,8 +8,11 @@ use utoipa::ToSchema; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use enums_db::by_table::media_files::media_file_class::MediaFileClass; +use enums_api::by_table::media_files::media_file_class::MediaFileClass as ApiMediaFileClass; use enums_db::by_table::media_files::media_file_engine_category::MediaFileEngineCategory; +use enums_api::by_table::media_files::media_file_engine_category::MediaFileEngineCategory as ApiMediaFileEngineCategory; use enums_db::by_table::media_files::media_file_type::MediaFileType; +use enums_api::by_table::media_files::media_file_type::MediaFileType as ApiMediaFileType; use enums_db::common::visibility::Visibility; use hashing::sha256::sha256_hash_bytes::sha256_hash_bytes; use http_server_common::request::get_request_ip::get_request_ip; @@ -195,14 +198,17 @@ pub async fn create_scene_handler( // TODO(bt, 2024-02-22): This should be a transaction. let (token, record_id) = insert_media_file_from_file_upload(InsertMediaFileFromUploadArgs { - maybe_media_class: Some(MediaFileClass::Dimensional), + maybe_media_class: Some(enums_convert::by_table::media_files::media_file_class::media_file_class_to_api(&MediaFileClass::Dimensional)), + media_file_type: MediaFileType::SceneRon, maybe_creator_user_token: maybe_user_token.as_ref(), maybe_creator_anonymous_visitor_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: Visibility::Public, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&Visibility::Public), + upload_type: UploadType::StorytellerEngine, - maybe_engine_category: Some(MediaFileEngineCategory::Scene), + maybe_engine_category: Some(enums_convert::by_table::media_files::media_file_engine_category::media_file_engine_category_to_api(&MediaFileEngineCategory::Scene)), + maybe_animation_type: None, maybe_mime_type: Some(mime_type), maybe_prompt_token: None, diff --git a/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/engine/get_scene_handler.rs b/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/engine/get_scene_handler.rs index a625e53f51..0e74b79d88 100644 --- a/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/engine/get_scene_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/engine/get_scene_handler.rs @@ -10,7 +10,7 @@ use log::warn; use utoipa::ToSchema; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; -use enums_db::by_table::media_files::media_file_type::MediaFileType; +use enums_api::by_table::media_files::media_file_type::MediaFileType; use mysql_queries::queries::media_files::get::get_media_file::get_media_file; use tokens::tokens::media_files::MediaFileToken; @@ -150,7 +150,8 @@ async fn modern_media_file_lookup( success: true, media_file: MediaFileInfo { token: result.token, - media_type: result.media_type, + media_type: enums_convert::by_table::media_files::media_file_type::media_file_type_to_api(&result.media_type), + public_bucket_path, created_at: result.created_at, updated_at: result.updated_at, diff --git a/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/image_gen/enqueue_image_generation.rs b/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/image_gen/enqueue_image_generation.rs index 8c161f1228..f9c65ab82c 100644 --- a/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/image_gen/enqueue_image_generation.rs +++ b/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/image_gen/enqueue_image_generation.rs @@ -16,8 +16,11 @@ use utoipa::ToSchema; use web::Data; use enums_db::by_table::generic_inference_jobs::inference_category::InferenceCategory; +use enums_api::by_table::generic_inference_jobs::inference_category::InferenceCategory as ApiInferenceCategory; use enums_db::by_table::generic_inference_jobs::inference_job_type::InferenceJobType; +use enums_api::by_table::generic_inference_jobs::inference_job_type::InferenceJobType as ApiInferenceJobType; use enums_db::by_table::generic_inference_jobs::inference_model_type::InferenceModelType; +use enums_api::by_table::generic_inference_jobs::inference_model_type::InferenceModelType as ApiInferenceModelType; use http_server_common::request::get_request_header_optional::get_request_header_optional; use http_server_common::request::get_request_ip::get_request_ip; use mysql_queries::payloads::generic_inference_args::generic_inference_args::{ diff --git a/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/workflows/enqueue/enqueue_face_fusion_workflow_handler.rs b/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/workflows/enqueue/enqueue_face_fusion_workflow_handler.rs index 33fdd2c625..61803dae40 100644 --- a/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/workflows/enqueue/enqueue_face_fusion_workflow_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/workflows/enqueue/enqueue_face_fusion_workflow_handler.rs @@ -8,8 +8,11 @@ use log::{error, info, warn}; use utoipa::ToSchema; use enums_db::by_table::generic_inference_jobs::inference_category::InferenceCategory; +use enums_api::by_table::generic_inference_jobs::inference_category::InferenceCategory as ApiInferenceCategory; use enums_db::by_table::generic_inference_jobs::inference_job_product_category::InferenceJobProductCategory; +use enums_api::by_table::generic_inference_jobs::inference_job_product_category::InferenceJobProductCategory as ApiInferenceJobProductCategory; use enums_db::by_table::generic_inference_jobs::inference_job_type::InferenceJobType; +use enums_api::by_table::generic_inference_jobs::inference_job_type::InferenceJobType as ApiInferenceJobType; use enums_db::common::visibility::Visibility; use http_server_common::request::get_request_ip::get_request_ip; use mysql_queries::payloads::generic_inference_args::common::watermark_type::WatermarkType; @@ -245,7 +248,8 @@ pub async fn enqueue_face_fusion_workflow_handler( let query_result = insert_generic_inference_job(InsertGenericInferenceArgs { uuid_idempotency_token: &request.uuid_idempotency_token, job_type: InferenceJobType::FaceFusion, - maybe_product_category: Some(InferenceJobProductCategory::VidLipsyncFaceFusion), + maybe_product_category: Some(enums_convert::by_table::generic_inference_jobs::inference_job_product_category::inference_job_product_category_to_api(&InferenceJobProductCategory::VidLipsyncFaceFusion)), + inference_category: InferenceCategory::LipsyncAnimation, maybe_model_type: None, maybe_model_token: None, @@ -262,7 +266,8 @@ pub async fn enqueue_face_fusion_workflow_handler( maybe_creator_user_token: Some(&user_session.user_token_typed), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: set_visibility, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&set_visibility), + priority_level, requires_keepalive: plan.workflow_requires_frontend_keepalive(), is_debug_request, diff --git a/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/workflows/enqueue/enqueue_live_portrait_workflow_handler.rs b/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/workflows/enqueue/enqueue_live_portrait_workflow_handler.rs index 09cba32605..b5ec62e4a1 100644 --- a/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/workflows/enqueue/enqueue_live_portrait_workflow_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/workflows/enqueue/enqueue_live_portrait_workflow_handler.rs @@ -8,8 +8,11 @@ use log::{error, info, warn}; use utoipa::ToSchema; use enums_db::by_table::generic_inference_jobs::inference_category::InferenceCategory; +use enums_api::by_table::generic_inference_jobs::inference_category::InferenceCategory as ApiInferenceCategory; use enums_db::by_table::generic_inference_jobs::inference_job_product_category::InferenceJobProductCategory; +use enums_api::by_table::generic_inference_jobs::inference_job_product_category::InferenceJobProductCategory as ApiInferenceJobProductCategory; use enums_db::by_table::generic_inference_jobs::inference_job_type::InferenceJobType; +use enums_api::by_table::generic_inference_jobs::inference_job_type::InferenceJobType as ApiInferenceJobType; use enums_db::common::visibility::Visibility; use http_server_common::request::get_request_ip::get_request_ip; use mysql_queries::payloads::generic_inference_args::common::watermark_type::WatermarkType; @@ -263,7 +266,8 @@ pub async fn enqueue_live_portrait_workflow_handler( let query_result = insert_generic_inference_job(InsertGenericInferenceArgs { uuid_idempotency_token: &request.uuid_idempotency_token, job_type: InferenceJobType::LivePortrait, - maybe_product_category: Some(product_category), + maybe_product_category: Some(enums_convert::by_table::generic_inference_jobs::inference_job_product_category::inference_job_product_category_to_api(&product_category)), + inference_category: InferenceCategory::LivePortrait, maybe_model_type: None, maybe_model_token: None, @@ -280,7 +284,8 @@ pub async fn enqueue_live_portrait_workflow_handler( maybe_creator_user_token: Some(&user_session.user_token_typed), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: set_visibility, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&set_visibility), + priority_level, requires_keepalive: plan.workflow_requires_frontend_keepalive(), is_debug_request, diff --git a/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/workflows/enqueue/enqueue_studio_workflow_handler.rs b/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/workflows/enqueue/enqueue_studio_workflow_handler.rs index a0cb1bbe2d..6a3c7dcddc 100644 --- a/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/workflows/enqueue/enqueue_studio_workflow_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/workflows/enqueue/enqueue_studio_workflow_handler.rs @@ -11,9 +11,13 @@ use log::{error, info, warn}; use utoipa::ToSchema; use enums_db::by_table::generic_inference_jobs::inference_category::InferenceCategory; +use enums_api::by_table::generic_inference_jobs::inference_category::InferenceCategory as ApiInferenceCategory; use enums_db::by_table::generic_inference_jobs::inference_job_product_category::InferenceJobProductCategory; +use enums_api::by_table::generic_inference_jobs::inference_job_product_category::InferenceJobProductCategory as ApiInferenceJobProductCategory; use enums_db::by_table::generic_inference_jobs::inference_job_type::InferenceJobType; +use enums_api::by_table::generic_inference_jobs::inference_job_type::InferenceJobType as ApiInferenceJobType; use enums_db::by_table::generic_inference_jobs::inference_model_type::InferenceModelType; +use enums_api::by_table::generic_inference_jobs::inference_model_type::InferenceModelType as ApiInferenceModelType; use enums_db::common::visibility::Visibility; use http_server_common::request::get_request_header_optional::get_request_header_optional; use http_server_common::request::get_request_ip::get_request_ip; @@ -277,8 +281,10 @@ pub async fn enqueue_studio_workflow_handler( global_ip_adapter_token: empty_media_file_token_to_null(request.global_ipa_media_token.as_ref()), // Other inputs - style_name: Some(request.style), - creator_visibility: Some(set_visibility), + style_name: Some(enums_convert::no_table::style_transfer::style_transfer_name::style_transfer_name_to_api(&request.style)), + + creator_visibility: Some(enums_convert::common::visibility::visibility_to_db(&set_visibility)), + trim_start_milliseconds: Some(trim_start_millis), trim_end_milliseconds: Some(trim_end_millis), strength: maybe_strength, @@ -322,7 +328,8 @@ pub async fn enqueue_studio_workflow_handler( let query_result = insert_generic_inference_job(InsertGenericInferenceArgs { uuid_idempotency_token: &request.uuid_idempotency_token, job_type: InferenceJobType::ComfyUi, - maybe_product_category: Some(InferenceJobProductCategory::VidStudio), + maybe_product_category: Some(enums_convert::by_table::generic_inference_jobs::inference_job_product_category::inference_job_product_category_to_api(&InferenceJobProductCategory::VidStudio)), + inference_category: InferenceCategory::Workflow, maybe_model_type: Some(InferenceModelType::ComfyUi), // NB: Model is static during inference maybe_model_token: None, // NB: Model is static during inference @@ -339,7 +346,8 @@ pub async fn enqueue_studio_workflow_handler( maybe_creator_user_token: maybe_user_token.as_ref(), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: set_visibility, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&set_visibility), + priority_level, requires_keepalive: false, is_debug_request, diff --git a/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/workflows/enqueue/enqueue_video_style_transfer_workflow_handler.rs b/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/workflows/enqueue/enqueue_video_style_transfer_workflow_handler.rs index 6f964dbaa8..6f6a62490d 100644 --- a/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/workflows/enqueue/enqueue_video_style_transfer_workflow_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/workflows/enqueue/enqueue_video_style_transfer_workflow_handler.rs @@ -11,9 +11,13 @@ use log::{error, info, warn}; use utoipa::ToSchema; use enums_db::by_table::generic_inference_jobs::inference_category::InferenceCategory; +use enums_api::by_table::generic_inference_jobs::inference_category::InferenceCategory as ApiInferenceCategory; use enums_db::by_table::generic_inference_jobs::inference_job_product_category::InferenceJobProductCategory; +use enums_api::by_table::generic_inference_jobs::inference_job_product_category::InferenceJobProductCategory as ApiInferenceJobProductCategory; use enums_db::by_table::generic_inference_jobs::inference_job_type::InferenceJobType; +use enums_api::by_table::generic_inference_jobs::inference_job_type::InferenceJobType as ApiInferenceJobType; use enums_db::by_table::generic_inference_jobs::inference_model_type::InferenceModelType; +use enums_api::by_table::generic_inference_jobs::inference_model_type::InferenceModelType as ApiInferenceModelType; use enums_db::common::visibility::Visibility; use http_server_common::request::get_request_header_optional::get_request_header_optional; use http_server_common::request::get_request_ip::get_request_ip; @@ -278,8 +282,10 @@ pub async fn enqueue_video_style_transfer_workflow_handler( global_ip_adapter_token: empty_media_file_token_to_null(request.global_ipa_media_token.as_ref()), // Other inputs - style_name: Some(request.style), - creator_visibility: Some(set_visibility), + style_name: Some(enums_convert::no_table::style_transfer::style_transfer_name::style_transfer_name_to_api(&request.style)), + + creator_visibility: Some(enums_convert::common::visibility::visibility_to_db(&set_visibility)), + trim_start_milliseconds: Some(trim_start_millis), trim_end_milliseconds: Some(trim_end_millis), strength: maybe_strength, @@ -323,7 +329,8 @@ pub async fn enqueue_video_style_transfer_workflow_handler( let query_result = insert_generic_inference_job(InsertGenericInferenceArgs { uuid_idempotency_token: &request.uuid_idempotency_token, job_type: InferenceJobType::ComfyUi, - maybe_product_category: Some(InferenceJobProductCategory::VidStyleTransfer), + maybe_product_category: Some(enums_convert::by_table::generic_inference_jobs::inference_job_product_category::inference_job_product_category_to_api(&InferenceJobProductCategory::VidStyleTransfer)), + inference_category: InferenceCategory::Workflow, maybe_model_type: Some(InferenceModelType::ComfyUi), // NB: Model is static during inference maybe_model_token: None, // NB: Model is static during inference @@ -340,7 +347,8 @@ pub async fn enqueue_video_style_transfer_workflow_handler( maybe_creator_user_token: maybe_user_token.as_ref(), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: set_visibility, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&set_visibility), + priority_level, requires_keepalive: false, is_debug_request, diff --git a/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/workflows/enqueue/get_inference_preview_status.rs b/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/workflows/enqueue/get_inference_preview_status.rs index 9fd17900ae..b3900f934c 100644 --- a/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/workflows/enqueue/get_inference_preview_status.rs +++ b/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/workflows/enqueue/get_inference_preview_status.rs @@ -11,7 +11,7 @@ use redis::{Commands, RedisResult}; use utoipa::ToSchema; use enums_db::by_table::generic_inference_jobs::frontend_failure_category::FrontendFailureCategory; -use enums_db::common::job_status_plus::JobStatusPlus; +use enums_api::common::job_status_plus::JobStatusPlus; use mysql_queries::queries::generic_inference::web::get_inference_job_status::get_inference_job_status; use mysql_queries::queries::generic_inference::web::job_status::GenericInferenceJobStatus; use redis_schema::keys::inference_job::style_transfer_progress_key::StyleTransferProgressKey; @@ -225,7 +225,8 @@ fn record_to_payload( // maybe_style_name: record.request_details.maybe_style_name, }, status: StatusDetailsResponse { - status: record.status, + status: enums_convert::common::job_status_plus::job_status_plus_to_api(&record.status), + maybe_extra_status_description, maybe_assigned_worker: maybe_filter_model_name(record.maybe_assigned_worker.as_deref()), maybe_assigned_cluster: record.maybe_assigned_cluster, diff --git a/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/workflows/enqueue/get_inference_preview_status_ws.rs b/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/workflows/enqueue/get_inference_preview_status_ws.rs index 56a4db454a..f86b9faba2 100644 --- a/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/workflows/enqueue/get_inference_preview_status_ws.rs +++ b/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/workflows/enqueue/get_inference_preview_status_ws.rs @@ -17,7 +17,7 @@ use utoipa::ToSchema; use web::Data; use enums_db::by_table::generic_inference_jobs::frontend_failure_category::FrontendFailureCategory; -use enums_db::common::job_status_plus::JobStatusPlus; +use enums_api::common::job_status_plus::JobStatusPlus; use mysql_queries::queries::generic_inference::web::get_inference_job_status::get_inference_job_status; use mysql_queries::queries::generic_inference::web::job_status::GenericInferenceJobStatus; use redis_schema::keys::inference_job::style_transfer_progress_key::StyleTransferProgressKey; @@ -234,7 +234,8 @@ fn record_to_payload( // maybe_style_name: record.request_details.maybe_style_name, }, status: StatusDetailsResponse { - status: record.status, + status: enums_convert::common::job_status_plus::job_status_plus_to_api(&record.status), + maybe_extra_status_description, maybe_assigned_worker: maybe_filter_model_name(record.maybe_assigned_worker.as_deref()), maybe_assigned_cluster: record.maybe_assigned_cluster, diff --git a/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/workflows/enqueue/vst_common/vst_request.rs b/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/workflows/enqueue/vst_common/vst_request.rs index 2e22534fd9..176262e22b 100644 --- a/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/workflows/enqueue/vst_common/vst_request.rs +++ b/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/workflows/enqueue/vst_common/vst_request.rs @@ -1,7 +1,7 @@ use utoipa::ToSchema; -use enums_db::common::visibility::Visibility; -use enums_db::no_table::style_transfer::style_transfer_name::StyleTransferName; +use enums_api::common::visibility::Visibility; +use enums_api::no_table::style_transfer::style_transfer_name::StyleTransferName; use tokens::tokens::media_files::MediaFileToken; #[derive(Deserialize, ToSchema)] diff --git a/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/workflows/enqueue_video_style_transfer_handler.rs b/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/workflows/enqueue_video_style_transfer_handler.rs index 23e60c885a..d3ed87dd05 100644 --- a/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/workflows/enqueue_video_style_transfer_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/workflows/enqueue_video_style_transfer_handler.rs @@ -12,10 +12,14 @@ use log::{error, info, warn}; use utoipa::ToSchema; use enums_db::by_table::generic_inference_jobs::inference_category::InferenceCategory; +use enums_api::by_table::generic_inference_jobs::inference_category::InferenceCategory as ApiInferenceCategory; use enums_db::by_table::generic_inference_jobs::inference_job_type::InferenceJobType; +use enums_api::by_table::generic_inference_jobs::inference_job_type::InferenceJobType as ApiInferenceJobType; use enums_db::by_table::generic_inference_jobs::inference_model_type::InferenceModelType; +use enums_api::by_table::generic_inference_jobs::inference_model_type::InferenceModelType as ApiInferenceModelType; use enums_db::common::visibility::Visibility; use enums_db::no_table::style_transfer::style_transfer_name::StyleTransferName; +use enums_api::no_table::style_transfer::style_transfer_name::StyleTransferName as ApiStyleTransferName; use http_server_common::request::get_request_header_optional::get_request_header_optional; use http_server_common::request::get_request_ip::get_request_ip; use mysql_queries::payloads::generic_inference_args::generic_inference_args::{GenericInferenceArgs, InferenceCategoryAbbreviated, PolymorphicInferenceArgs}; @@ -406,8 +410,10 @@ pub async fn enqueue_video_style_transfer_handler( global_ip_adapter_token: empty_media_file_token_to_null(request.global_ipa_media_token.as_ref()), // Other inputs - style_name: Some(request.style), - creator_visibility: Some(set_visibility), + style_name: Some(enums_convert::no_table::style_transfer::style_transfer_name::style_transfer_name_to_api(&request.style)), + + creator_visibility: Some(enums_convert::common::visibility::visibility_to_db(&set_visibility)), + trim_start_milliseconds: Some(trim_start_millis), trim_end_milliseconds: Some(trim_end_millis), strength: maybe_strength, @@ -468,7 +474,8 @@ pub async fn enqueue_video_style_transfer_handler( maybe_creator_user_token: maybe_user_token.as_ref(), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: set_visibility, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&set_visibility), + priority_level, requires_keepalive: plan.workflow_requires_frontend_keepalive(), is_debug_request, diff --git a/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/workflows/enqueue_workflow_upload_request.rs b/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/workflows/enqueue_workflow_upload_request.rs index fb3e85e1cc..3929a393c7 100644 --- a/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/workflows/enqueue_workflow_upload_request.rs +++ b/crates/service/web/storyteller_web/src/http_server/deprecated_endpoints/workflows/enqueue_workflow_upload_request.rs @@ -16,8 +16,11 @@ use utoipa::ToSchema; use web::Data; use enums_db::by_table::generic_inference_jobs::inference_category::InferenceCategory; +use enums_api::by_table::generic_inference_jobs::inference_category::InferenceCategory as ApiInferenceCategory; use enums_db::by_table::generic_inference_jobs::inference_job_type::InferenceJobType; +use enums_api::by_table::generic_inference_jobs::inference_job_type::InferenceJobType as ApiInferenceJobType; use enums_db::by_table::generic_inference_jobs::inference_model_type::InferenceModelType; +use enums_api::by_table::generic_inference_jobs::inference_model_type::InferenceModelType as ApiInferenceModelType; use enums_db::common::visibility::Visibility; use http_server_common::request::get_request_header_optional::get_request_header_optional; use http_server_common::request::get_request_ip::get_request_ip; @@ -220,7 +223,8 @@ pub async fn enqueue_workflow_upload_request( maybe_title: Some(title), maybe_description: Some(description), maybe_commit_hash: Some(commit_hash), - creator_visibility: Some(visibility), + creator_visibility: Some(enums_convert::common::visibility::visibility_to_db(&visibility)), + remove_watermark: None, // NB: The following args are irrelevant for uploading workflows maybe_lora_model: None, @@ -287,7 +291,8 @@ pub async fn enqueue_workflow_upload_request( maybe_creator_user_token: maybe_user_token.as_ref(), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: Visibility::Private, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&Visibility::Private), + priority_level, requires_keepalive: false, //reverse ... TODO fix this. we set it base on account is premium or not ... is_debug_request, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/analytics/log_app_active_user_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/analytics/log_app_active_user_handler.rs index ad23712094..6881007035 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/analytics/log_app_active_user_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/analytics/log_app_active_user_handler.rs @@ -7,6 +7,7 @@ use actix_web::web::{Json, Query}; use actix_web::{web, HttpRequest}; use artcraft_api_defs::analytics::log_active_user::{LogAppActiveUserRequest, LogAppActiveUserResponse}; use enums_db::common::payments_namespace::PaymentsNamespace; +use enums_api::common::payments_namespace::PaymentsNamespace as ApiPaymentsNamespace; use errors::AnyhowResult; use http_server_common::request::get_request_ip::get_request_ip; use log::{info, warn}; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/app_state/components/get_permissions.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/app_state/components/get_permissions.rs index f9b3a0b792..c3f9c2d485 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/app_state/components/get_permissions.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/app_state/components/get_permissions.rs @@ -1,5 +1,5 @@ use crate::http_server::session::lookup::user_session_extended::{UserSessionExtended, UserSessionRoleAndPermissions}; -use enums_db::by_table::users::user_feature_flag::UserFeatureFlag; +use enums_api::by_table::users::user_feature_flag::UserFeatureFlag; use std::collections::BTreeSet; use utoipa::ToSchema; @@ -54,7 +54,8 @@ pub fn get_permissions( None => LOGGED_OUT_PERMISSIONS.clone(), Some(user) => AppStatePermissions { is_moderator: is_moderator(&user.role), - feature_flags: user.feature_flags.clone_flags(), + feature_flags: enums_convert::by_table::users::user_feature_flag::user_feature_flag_to_api(&user.feature_flags.clone_flags()), + legacy_permission_flags: AppStateLegacyPermissionFlags { can_use_tts: user.role.can_use_tts, can_use_w2l: user.role.can_use_w2l, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/beta_keys/create_beta_keys_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/beta_keys/create_beta_keys_handler.rs index 3e4d9a2e10..84980f6684 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/beta_keys/create_beta_keys_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/beta_keys/create_beta_keys_handler.rs @@ -9,6 +9,7 @@ use utoipa::ToSchema; use crockford::crockford_entropy_lower; use enums_db::by_table::beta_keys::beta_key_product::BetaKeyProduct; +use enums_api::by_table::beta_keys::beta_key_product::BetaKeyProduct as ApiBetaKeyProduct; use mysql_queries::queries::beta_keys::insert_batch_beta_keys::{insert_batch_beta_keys, InsertBatchArgs}; use mysql_queries::queries::users::user_profiles::get_user_profile_by_username::get_user_profile_by_username; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/beta_keys/list_beta_keys_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/beta_keys/list_beta_keys_handler.rs index 8a7c9c8add..f1735961aa 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/beta_keys/list_beta_keys_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/beta_keys/list_beta_keys_handler.rs @@ -8,7 +8,7 @@ use chrono::{DateTime, Utc}; use log::warn; use utoipa::{IntoParams, ToSchema}; -use enums_db::by_table::beta_keys::beta_key_product::BetaKeyProduct; +use enums_api::by_table::beta_keys::beta_key_product::BetaKeyProduct; use markdown::markdown_with_socials_to_html::markdown_with_socials_to_html; use mysql_queries::queries::beta_keys::list_beta_keys::{list_beta_keys, FilterToKeys, ListBetaKeysArgs}; use mysql_queries::queries::users::user_profiles::get_user_profile_by_username::get_user_profile_by_username; @@ -201,7 +201,8 @@ pub async fn list_beta_keys_handler( .map(|beta_key| { BetaKeyItem { token: beta_key.token.clone(), - product: beta_key.product, + product: enums_convert::by_table::beta_keys::beta_key_product::beta_key_product_to_api(&beta_key.product), + key_value: beta_key.key_value, creator: UserDetailsLight::from_db_fields( &beta_key.creator_user_token, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/beta_keys/redeem_beta_key_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/beta_keys/redeem_beta_key_handler.rs index 9617270a45..d9246e6707 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/beta_keys/redeem_beta_key_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/beta_keys/redeem_beta_key_handler.rs @@ -9,7 +9,8 @@ use utoipa::ToSchema; use crate::http_server::session::lookup::user_session_feature_flags::UserSessionFeatureFlags; use enums_db::by_table::beta_keys::beta_key_product::BetaKeyProduct; -use enums_db::by_table::users::user_feature_flag::UserFeatureFlag; +use enums_api::by_table::beta_keys::beta_key_product::BetaKeyProduct as ApiBetaKeyProduct; +use enums_api::by_table::users::user_feature_flag::UserFeatureFlag; use http_server_common::request::get_request_ip::get_request_ip; use mysql_queries::queries::beta_keys::get_beta_key_by_value::get_beta_key_by_value; use mysql_queries::queries::beta_keys::redeem_beta_key::redeem_beta_key; @@ -128,6 +129,7 @@ pub async fn redeem_beta_key_handler( match beta_key.product { BetaKeyProduct::Studio => { + enroll_in_studio(&request, &server_state, &user_session, &ip_address) .await .map_err(|err| { diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/comments/create_comment_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/comments/create_comment_handler.rs index 76b3ec55f6..4285597f76 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/comments/create_comment_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/comments/create_comment_handler.rs @@ -13,6 +13,7 @@ use log::warn; use utoipa::ToSchema; use enums_db::by_table::comments::comment_entity_type::CommentEntityType; +use enums_api::by_table::comments::comment_entity_type::CommentEntityType as ApiCommentEntityType; use http_server_common::request::get_request_ip::get_request_ip; use markdown::simple_markdown_to_html::simple_markdown_to_html; use mysql_queries::queries::comments::comment_entity_token::CommentEntityToken; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/comments/list_comments_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/comments/list_comments_handler.rs index 3dd26e732d..172549bdf9 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/comments/list_comments_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/comments/list_comments_handler.rs @@ -18,6 +18,7 @@ use crate::http_server::common_responses::user_avatars::default_avatar_color_fro use crate::http_server::common_responses::user_avatars::default_avatar_from_username::default_avatar_from_username; use crate::http_server::common_responses::user_details_lite::{UserDefaultAvatarInfo, UserDetailsLight}; use enums_db::by_table::comments::comment_entity_type::CommentEntityType; +use enums_api::by_table::comments::comment_entity_type::CommentEntityType as ApiCommentEntityType; use mysql_queries::queries::comments::comment_entity_token::CommentEntityToken; use mysql_queries::queries::comments::list_comments_for_entity::list_comments_for_entity; use tokens::tokens::comments::CommentToken; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/credits/get_session_credits_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/credits/get_session_credits_handler.rs index bff4d5b0ed..9fbf898d43 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/credits/get_session_credits_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/credits/get_session_credits_handler.rs @@ -8,7 +8,7 @@ use actix_web::web::{Json, Path}; use actix_web::{web, HttpMessage, HttpRequest, HttpResponse}; use artcraft_api_defs::credits::get_session_credits::GetSessionCreditsResponse; use chrono::{DateTime, Utc}; -use enums_db::common::payments_namespace::PaymentsNamespace; +use enums_api::common::payments_namespace::PaymentsNamespace; use log::{error, warn}; use mysql_queries::queries::prompt_context_items::list_prompt_context_items::list_prompt_context_items; use mysql_queries::queries::prompts::get_prompt::{get_prompt, get_prompt_from_connection}; @@ -64,7 +64,8 @@ pub async fn get_session_credits_handler( let maybe_wallet = find_primary_wallet_for_owner_using_connection( &user_token, - path.namespace, + enums_convert::common::payments_namespace::payments_namespace_to_api(&path.namespace), + &mut mysql_connection, ).await.map_err(|err| { error!("Error finding primary wallet for user: {:?}, error: {:?}", user_token, err); diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/featured_items/create_featured_item_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/featured_items/create_featured_item_handler.rs index aafa897ef1..c29361d120 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/featured_items/create_featured_item_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/featured_items/create_featured_item_handler.rs @@ -12,6 +12,7 @@ use composite_identifiers::by_table::audit_logs::audit_log_entity::AuditLogEntit use composite_identifiers::by_table::featured_items::featured_item_entity::FeaturedItemEntity; use enums_db::by_table::audit_logs::audit_log_entity_action::AuditLogEntityAction; use enums_db::by_table::featured_items::featured_item_entity_type::FeaturedItemEntityType; +use enums_api::by_table::featured_items::featured_item_entity_type::FeaturedItemEntityType as ApiFeaturedItemEntityType; use enums_db::common::visibility::Visibility; use http_server_common::request::get_request_ip::get_request_ip; use mysql_queries::queries::audit_logs::insert_audit_log_transactional::{insert_audit_log_transactional, InsertAuditLogTransactionalArgs}; @@ -149,7 +150,8 @@ pub async fn create_featured_item_handler( let token = MediaFileToken::new_from_str(&request.entity_token); let result = update_media_file_visibility_transactional(UpdateMediaFileTransactionalArgs { media_file_token: &token, - creator_set_visibility: Visibility::Public, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&Visibility::Public), + transaction: &mut transaction, }).await; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/featured_items/delete_featured_item_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/featured_items/delete_featured_item_handler.rs index 66d68db22b..ace42ffbe3 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/featured_items/delete_featured_item_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/featured_items/delete_featured_item_handler.rs @@ -12,6 +12,7 @@ use composite_identifiers::by_table::audit_logs::audit_log_entity::AuditLogEntit use composite_identifiers::by_table::featured_items::featured_item_entity::FeaturedItemEntity; use enums_db::by_table::audit_logs::audit_log_entity_action::AuditLogEntityAction; use enums_db::by_table::featured_items::featured_item_entity_type::FeaturedItemEntityType; +use enums_api::by_table::featured_items::featured_item_entity_type::FeaturedItemEntityType as ApiFeaturedItemEntityType; use http_server_common::request::get_request_ip::get_request_ip; use mysql_queries::queries::audit_logs::insert_audit_log_transactional::{insert_audit_log_transactional, InsertAuditLogTransactionalArgs}; use mysql_queries::queries::featured_items::delete_featured_item::delete_featured_item; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/featured_items/get_is_featured_item_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/featured_items/get_is_featured_item_handler.rs index c7c4880242..d4481ef484 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/featured_items/get_is_featured_item_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/featured_items/get_is_featured_item_handler.rs @@ -10,6 +10,7 @@ use utoipa::ToSchema; use composite_identifiers::by_table::featured_items::featured_item_entity::FeaturedItemEntity; use enums_db::by_table::featured_items::featured_item_entity_type::FeaturedItemEntityType; +use enums_api::by_table::featured_items::featured_item_entity_type::FeaturedItemEntityType as ApiFeaturedItemEntityType; use mysql_queries::queries::featured_items::get_is_featured_by_token::get_is_featured_by_token; use tokens::tokens::media_files::MediaFileToken; use tokens::tokens::model_weights::ModelWeightToken; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/cost_estimate/image/estimate_image_cost_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/cost_estimate/image/estimate_image_cost_handler.rs index 1c7ec849ea..a2d66513bd 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/cost_estimate/image/estimate_image_cost_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/cost_estimate/image/estimate_image_cost_handler.rs @@ -17,7 +17,7 @@ use artcraft_router::generate::generate_image::generate_image_request::GenerateI use enums_api::common::generation::common_aspect_ratio::CommonAspectRatio; use enums_api::common::generation::common_image_model::CommonImageModel; use enums_api::common::generation::common_video_resolution::CommonVideoResolution; -use enums_db::common::generation::generation_provider::GenerationProvider; +use enums_api::common::generation::generation_provider::GenerationProvider; /// Estimate the credit and USD cost of an image generation request. /// Does not require authentication and does not charge any credits. diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/cost_estimate/splat/estimate_splat_cost_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/cost_estimate/splat/estimate_splat_cost_handler.rs index bab6fcf146..d7aff2f63c 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/cost_estimate/splat/estimate_splat_cost_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/cost_estimate/splat/estimate_splat_cost_handler.rs @@ -12,7 +12,7 @@ use artcraft_router::api::image_list_ref::ImageListRef; use artcraft_router::api::provider::Provider as RouterProvider; use artcraft_router::generate::generate_splat::generate_splat_request::GenerateSplatRequest; use enums_api::common::generation::common_splat_model::CommonSplatModel; -use enums_db::common::generation::generation_provider::GenerationProvider; +use enums_api::common::generation::generation_provider::GenerationProvider; use tokens::tokens::media_files::MediaFileToken; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/cost_estimate/video/estimate_video_cost_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/cost_estimate/video/estimate_video_cost_handler.rs index fd4cd55640..4270a12bec 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/cost_estimate/video/estimate_video_cost_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/cost_estimate/video/estimate_video_cost_handler.rs @@ -16,7 +16,7 @@ use artcraft_router::generate::generate_video::generate_video_request::GenerateV use enums_api::common::generation::common_aspect_ratio::CommonAspectRatio; use enums_api::common::generation::common_video_model::CommonVideoModel; use enums_api::common::generation::common_video_resolution::CommonVideoResolution; -use enums_db::common::generation::generation_provider::GenerationProvider; +use enums_api::common::generation::generation_provider::GenerationProvider; /// Estimate the credit and USD cost of a video generation request. diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/angle/flux_2_lora_edit_image_angle_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/angle/flux_2_lora_edit_image_angle_handler.rs index 8fd6f62dc1..df89fede7e 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/angle/flux_2_lora_edit_image_angle_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/angle/flux_2_lora_edit_image_angle_handler.rs @@ -169,7 +169,8 @@ pub async fn flux_2_lora_edit_image_angle_handler( prompt_type: PromptType::ArtcraftApp, maybe_creator_user_token: Some(&user_token), maybe_model_type: Some(ModelType::Flux2LoraAngles), - maybe_generation_provider: Some(GenerationProvider::Artcraft), + maybe_generation_provider: Some(enums_convert::common::generation::generation_provider::generation_provider_to_api(&GenerationProvider::Artcraft)), + maybe_positive_prompt: None, maybe_negative_prompt: None, maybe_other_args: None, @@ -213,7 +214,8 @@ pub async fn flux_2_lora_edit_image_angle_handler( maybe_creator_user_token: Some(&user_token), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: Visibility::Public, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&Visibility::Public), + mysql_executor: &mut *transaction, starting_job_status_override: None, maybe_frontend_failure_category: None, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/angle/qwen_edit_2511_edit_image_angle_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/angle/qwen_edit_2511_edit_image_angle_handler.rs index ed65eafd69..9db0f494e4 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/angle/qwen_edit_2511_edit_image_angle_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/angle/qwen_edit_2511_edit_image_angle_handler.rs @@ -170,7 +170,8 @@ pub async fn qwen_edit_2511_edit_image_angle_handler( prompt_type: PromptType::ArtcraftApp, maybe_creator_user_token: Some(&user_token), maybe_model_type: Some(ModelType::QwenEdit2511Angles), - maybe_generation_provider: Some(GenerationProvider::Artcraft), + maybe_generation_provider: Some(enums_convert::common::generation::generation_provider::generation_provider_to_api(&GenerationProvider::Artcraft)), + maybe_positive_prompt: request.additional_prompt.as_deref(), maybe_negative_prompt: None, maybe_other_args: None, @@ -214,7 +215,8 @@ pub async fn qwen_edit_2511_edit_image_angle_handler( maybe_creator_user_token: Some(&user_token), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: Visibility::Public, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&Visibility::Public), + mysql_executor: &mut *transaction, starting_job_status_override: None, maybe_frontend_failure_category: None, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/edit/flux_pro_kontext_max_edit_image_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/edit/flux_pro_kontext_max_edit_image_handler.rs index 002b39ae1a..7d03061f22 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/edit/flux_pro_kontext_max_edit_image_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/edit/flux_pro_kontext_max_edit_image_handler.rs @@ -12,9 +12,13 @@ use actix_web::{web, HttpRequest}; use artcraft_api_defs::generate::image::edit::flux_pro_kontext_max_edit_image::{FluxProKontextMaxEditImageNumImages, FluxProKontextMaxEditImageRequest, FluxProKontextMaxEditImageResponse}; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use enums_db::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType; +use enums_api::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType as ApiPromptContextSemanticType; use enums_db::by_table::prompts::prompt_type::PromptType; +use enums_api::by_table::prompts::prompt_type::PromptType as ApiPromptType; use enums_db::common::generation::generation_provider::GenerationProvider; +use enums_api::common::generation::generation_provider::GenerationProvider as ApiGenerationProvider; use enums_db::common::model_type::ModelType; +use enums_api::common::model_type::ModelType as ApiModelType; use enums_db::common::visibility::Visibility; use fal_client::creds::open_ai_api_key::OpenAiApiKey; use fal_client::requests::webhook::image::edit::enqueue_flux_pro_kontext_max_edit_webhook::{enqueue_flux_pro_kontext_max_edit_webhook, FluxProKontextMaxArgs, FluxProKontextMaxNumImages}; @@ -214,7 +218,8 @@ pub async fn flux_pro_kontext_max_edit_image_handler( .as_ref() .map(|s| &s.user_token), maybe_model_type: Some(ModelType::FluxProKontextMax), - maybe_generation_provider: Some(GenerationProvider::Artcraft), + maybe_generation_provider: Some(enums_convert::common::generation::generation_provider::generation_provider_to_api(&GenerationProvider::Artcraft)), + maybe_positive_prompt: request.prompt.as_deref(), maybe_negative_prompt: None, maybe_other_args: None, @@ -258,7 +263,8 @@ pub async fn flux_pro_kontext_max_edit_image_handler( maybe_creator_user_token: maybe_user_session.as_ref().map(|s| &s.user_token), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: Visibility::Public, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&Visibility::Public), + mysql_executor: &mut *transaction, phantom: Default::default(), }).await; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/edit/gemini_25_flash_edit_image_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/edit/gemini_25_flash_edit_image_handler.rs index 4b8e0217a7..bfeba728e1 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/edit/gemini_25_flash_edit_image_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/edit/gemini_25_flash_edit_image_handler.rs @@ -11,11 +11,17 @@ use actix_web::{web, HttpRequest}; use artcraft_api_defs::generate::image::edit::gemini_25_flash_edit_image::{Gemini25FlashEditImageNumImages, Gemini25FlashEditImageRequest, Gemini25FlashEditImageResponse}; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use enums_db::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType; +use enums_api::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType as ApiPromptContextSemanticType; use enums_db::by_table::prompts::prompt_type::PromptType; +use enums_api::by_table::prompts::prompt_type::PromptType as ApiPromptType; use enums_db::common::generation::generation_provider::GenerationProvider; +use enums_api::common::generation::generation_provider::GenerationProvider as ApiGenerationProvider; use enums_db::common::model_type::ModelType; +use enums_api::common::model_type::ModelType as ApiModelType; use enums_db::common::payments_namespace::PaymentsNamespace; +use enums_api::common::payments_namespace::PaymentsNamespace as ApiPaymentsNamespace; use enums_db::common::stripe_subscription_status::StripeSubscriptionStatus; +use enums_api::common::stripe_subscription_status::StripeSubscriptionStatus as ApiStripeSubscriptionStatus; use enums_db::common::visibility::Visibility; use fal_client::creds::open_ai_api_key::OpenAiApiKey; use fal_client::requests::webhook::image::edit::enqueue_gemini_25_flash_edit_webhook::{enqueue_gemini_25_flash_edit_webhook, Gemini25FlashEditArgs, Gemini25FlashEditNumImages}; @@ -93,6 +99,7 @@ pub async fn gemini_25_flash_edit_image_handler( let result = find_subscription_for_owner_user_using_connection( user_token, PaymentsNamespace::Artcraft, + &mut mysql_connection, ).await; @@ -231,7 +238,8 @@ pub async fn gemini_25_flash_edit_image_handler( prompt_type: PromptType::ArtcraftApp, maybe_creator_user_token: Some(&user_token), maybe_model_type: Some(ModelType::Gemini25Flash), - maybe_generation_provider: Some(GenerationProvider::Artcraft), + maybe_generation_provider: Some(enums_convert::common::generation::generation_provider::generation_provider_to_api(&GenerationProvider::Artcraft)), + maybe_positive_prompt: request.prompt.as_deref(), maybe_negative_prompt: None, maybe_other_args: None, @@ -276,7 +284,8 @@ pub async fn gemini_25_flash_edit_image_handler( maybe_creator_user_token: Some(&user_token), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: Visibility::Public, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&Visibility::Public), + mysql_executor: &mut *transaction, starting_job_status_override: None, maybe_frontend_failure_category: None, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/edit/gpt_image_1_edit_image_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/edit/gpt_image_1_edit_image_handler.rs index 7360bf5483..4499c3ace1 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/edit/gpt_image_1_edit_image_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/edit/gpt_image_1_edit_image_handler.rs @@ -12,11 +12,17 @@ use actix_web::{web, HttpRequest}; use artcraft_api_defs::generate::image::edit::gpt_image_1_edit_image::{GptImage1EditImageImageQuality, GptImage1EditImageImageSize, GptImage1EditImageNumImages, GptImage1EditImageRequest, GptImage1EditImageResponse}; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use enums_db::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType; +use enums_api::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType as ApiPromptContextSemanticType; use enums_db::by_table::prompts::prompt_type::PromptType; +use enums_api::by_table::prompts::prompt_type::PromptType as ApiPromptType; use enums_db::common::generation::generation_provider::GenerationProvider; +use enums_api::common::generation::generation_provider::GenerationProvider as ApiGenerationProvider; use enums_db::common::model_type::ModelType; +use enums_api::common::model_type::ModelType as ApiModelType; use enums_db::common::payments_namespace::PaymentsNamespace; +use enums_api::common::payments_namespace::PaymentsNamespace as ApiPaymentsNamespace; use enums_db::common::stripe_subscription_status::StripeSubscriptionStatus; +use enums_api::common::stripe_subscription_status::StripeSubscriptionStatus as ApiStripeSubscriptionStatus; use enums_db::common::visibility::Visibility; use fal_client::creds::open_ai_api_key::OpenAiApiKey; use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator; @@ -91,6 +97,7 @@ pub async fn gpt_image_1_edit_image_handler( let result = find_subscription_for_owner_user_using_connection( &user_token, PaymentsNamespace::Artcraft, + &mut mysql_connection, ).await; @@ -253,7 +260,8 @@ pub async fn gpt_image_1_edit_image_handler( prompt_type: PromptType::ArtcraftApp, maybe_creator_user_token: Some(&user_token), maybe_model_type: Some(ModelType::GptImage1), - maybe_generation_provider: Some(GenerationProvider::Artcraft), + maybe_generation_provider: Some(enums_convert::common::generation::generation_provider::generation_provider_to_api(&GenerationProvider::Artcraft)), + maybe_positive_prompt: request.prompt.as_deref(), maybe_negative_prompt: None, maybe_other_args: None, @@ -298,7 +306,8 @@ pub async fn gpt_image_1_edit_image_handler( maybe_creator_user_token: Some(&user_token), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: Visibility::Public, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&Visibility::Public), + mysql_executor: &mut *transaction, starting_job_status_override: None, maybe_frontend_failure_category: None, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/edit/qwen_edit_image_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/edit/qwen_edit_image_handler.rs index 7c3b897e44..c9d6b2164d 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/edit/qwen_edit_image_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/edit/qwen_edit_image_handler.rs @@ -12,9 +12,13 @@ use actix_web::{web, HttpRequest}; use artcraft_api_defs::generate::image::edit::qwen_edit_image::{QwenEditImageAcceleration, QwenEditImageNumImages, QwenEditImageRequest, QwenEditImageResponse}; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use enums_db::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType; +use enums_api::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType as ApiPromptContextSemanticType; use enums_db::by_table::prompts::prompt_type::PromptType; +use enums_api::by_table::prompts::prompt_type::PromptType as ApiPromptType; use enums_db::common::generation::generation_provider::GenerationProvider; +use enums_api::common::generation::generation_provider::GenerationProvider as ApiGenerationProvider; use enums_db::common::model_type::ModelType; +use enums_api::common::model_type::ModelType as ApiModelType; use enums_db::common::visibility::Visibility; use fal_client::creds::open_ai_api_key::OpenAiApiKey; use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator; @@ -205,7 +209,8 @@ pub async fn qwen_edit_image_handler( prompt_type: PromptType::ArtcraftApp, maybe_creator_user_token: Some(&user_token), maybe_model_type: Some(ModelType::Qwen), - maybe_generation_provider: Some(GenerationProvider::Artcraft), + maybe_generation_provider: Some(enums_convert::common::generation::generation_provider::generation_provider_to_api(&GenerationProvider::Artcraft)), + maybe_positive_prompt: request.prompt.as_deref(), maybe_negative_prompt: None, maybe_other_args: None, @@ -250,7 +255,8 @@ pub async fn qwen_edit_image_handler( maybe_creator_user_token: Some(&user_token), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: Visibility::Public, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&Visibility::Public), + mysql_executor: &mut *transaction, starting_job_status_override: None, maybe_frontend_failure_category: None, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/edit/seededit_3_edit_image_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/edit/seededit_3_edit_image_handler.rs index ed82f1e514..66189e8b51 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/edit/seededit_3_edit_image_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/edit/seededit_3_edit_image_handler.rs @@ -11,9 +11,13 @@ use actix_web::{web, HttpRequest}; use artcraft_api_defs::generate::image::edit::seededit_3_edit_image::{SeedEdit3EditImageRequest, SeedEdit3EditImageResponse}; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use enums_db::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType; +use enums_api::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType as ApiPromptContextSemanticType; use enums_db::by_table::prompts::prompt_type::PromptType; +use enums_api::by_table::prompts::prompt_type::PromptType as ApiPromptType; use enums_db::common::generation::generation_provider::GenerationProvider; +use enums_api::common::generation::generation_provider::GenerationProvider as ApiGenerationProvider; use enums_db::common::model_type::ModelType; +use enums_api::common::model_type::ModelType as ApiModelType; use enums_db::common::visibility::Visibility; use fal_client::creds::open_ai_api_key::OpenAiApiKey; use fal_client::requests::webhook::image::edit::enqueue_seededit_v3_edit_webhook::{enqueue_seededit_v3_edit_webhook, SeedEditV3EditArgs}; @@ -175,7 +179,8 @@ pub async fn seededit_3_edit_image_handler( .as_ref() .map(|s| &s.user_token), maybe_model_type: Some(ModelType::SeedEdit3), - maybe_generation_provider: Some(GenerationProvider::Artcraft), + maybe_generation_provider: Some(enums_convert::common::generation::generation_provider::generation_provider_to_api(&GenerationProvider::Artcraft)), + maybe_positive_prompt: request.prompt.as_deref(), maybe_negative_prompt: None, maybe_other_args: None, @@ -219,7 +224,8 @@ pub async fn seededit_3_edit_image_handler( maybe_creator_user_token: maybe_user_session.as_ref().map(|s| &s.user_token), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: Visibility::Public, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&Visibility::Public), + mysql_executor: &mut *transaction, phantom: Default::default(), }).await; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/generate_flux_1_dev_text_to_image_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/generate_flux_1_dev_text_to_image_handler.rs index 74ac0428a0..15d57568a6 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/generate_flux_1_dev_text_to_image_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/generate_flux_1_dev_text_to_image_handler.rs @@ -12,8 +12,11 @@ use artcraft_api_defs::generate::image::edit::flux_pro_kontext_max_edit_image::F use artcraft_api_defs::generate::image::text::generate_flux_1_dev_text_to_image::{GenerateFlux1DevTextToImageAspectRatio, GenerateFlux1DevTextToImageNumImages, GenerateFlux1DevTextToImageRequest, GenerateFlux1DevTextToImageResponse}; use enums_db::by_table::generic_inference_jobs::frontend_failure_category::FrontendFailureCategory; use enums_db::by_table::prompts::prompt_type::PromptType; +use enums_api::by_table::prompts::prompt_type::PromptType as ApiPromptType; use enums_db::common::generation::generation_provider::GenerationProvider; +use enums_api::common::generation::generation_provider::GenerationProvider as ApiGenerationProvider; use enums_db::common::model_type::ModelType; +use enums_api::common::model_type::ModelType as ApiModelType; use enums_db::common::visibility::Visibility; use fal_client::requests::webhook::image::text::enqueue_flux_1_dev_text_to_image_webhook::enqueue_flux_1_dev_text_to_image_webhook; use fal_client::requests::webhook::image::text::enqueue_flux_1_dev_text_to_image_webhook::{Flux1DevArgs, Flux1DevAspectRatio, Flux1DevNumImages}; @@ -194,7 +197,8 @@ pub async fn generate_flux_1_dev_text_to_image_handler( .as_ref() .map(|s| &s.user_token), maybe_model_type: Some(ModelType::Flux1Dev), - maybe_generation_provider: Some(GenerationProvider::Artcraft), + maybe_generation_provider: Some(enums_convert::common::generation::generation_provider::generation_provider_to_api(&GenerationProvider::Artcraft)), + maybe_positive_prompt: request.prompt.as_deref(), maybe_negative_prompt: None, maybe_other_args: None, @@ -220,7 +224,8 @@ pub async fn generate_flux_1_dev_text_to_image_handler( maybe_creator_user_token: maybe_user_session.as_ref().map(|s| &s.user_token), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: Visibility::Public, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&Visibility::Public), + mysql_executor: &mut *transaction, phantom: Default::default(), }).await; @@ -274,7 +279,8 @@ async fn insert_mock_failure_job( prompt_type: PromptType::ArtcraftApp, maybe_creator_user_token, maybe_model_type: Some(ModelType::Flux1Dev), - maybe_generation_provider: Some(GenerationProvider::Artcraft), + maybe_generation_provider: Some(enums_convert::common::generation::generation_provider::generation_provider_to_api(&GenerationProvider::Artcraft)), + maybe_positive_prompt: prompt, maybe_negative_prompt: None, maybe_other_args: None, @@ -299,7 +305,8 @@ async fn insert_mock_failure_job( maybe_creator_user_token, maybe_avt_token, creator_ip_address: &ip_address, - creator_set_visibility: Visibility::Public, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&Visibility::Public), + maybe_frontend_failure_category, maybe_failure_reason, mysql_executor: &mut *transaction, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/generate_flux_1_schnell_text_to_image_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/generate_flux_1_schnell_text_to_image_handler.rs index 3ef5d84b4b..f850e57886 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/generate_flux_1_schnell_text_to_image_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/generate_flux_1_schnell_text_to_image_handler.rs @@ -9,8 +9,11 @@ use actix_web::web::Json; use actix_web::{web, HttpRequest}; use artcraft_api_defs::generate::image::text::generate_flux_1_schnell_text_to_image::{GenerateFlux1SchnellTextToImageAspectRatio, GenerateFlux1SchnellTextToImageNumImages, GenerateFlux1SchnellTextToImageRequest, GenerateFlux1SchnellTextToImageResponse}; use enums_db::by_table::prompts::prompt_type::PromptType; +use enums_api::by_table::prompts::prompt_type::PromptType as ApiPromptType; use enums_db::common::generation::generation_provider::GenerationProvider; +use enums_api::common::generation::generation_provider::GenerationProvider as ApiGenerationProvider; use enums_db::common::model_type::ModelType; +use enums_api::common::model_type::ModelType as ApiModelType; use enums_db::common::visibility::Visibility; use fal_client::requests::webhook::image::text::enqueue_flux_1_schnell_text_to_image_webhook::enqueue_flux_1_schnell_text_to_image_webhook; use fal_client::requests::webhook::image::text::enqueue_flux_1_schnell_text_to_image_webhook::{Flux1SchnellArgs, Flux1SchnellAspectRatio, Flux1SchnellNumImages}; @@ -174,7 +177,8 @@ pub async fn generate_flux_1_schnell_text_to_image_handler( .as_ref() .map(|s| &s.user_token), maybe_model_type: Some(ModelType::Flux1Schnell), - maybe_generation_provider: Some(GenerationProvider::Artcraft), + maybe_generation_provider: Some(enums_convert::common::generation::generation_provider::generation_provider_to_api(&GenerationProvider::Artcraft)), + maybe_positive_prompt: request.prompt.as_deref(), maybe_negative_prompt: None, maybe_other_args: None, @@ -200,7 +204,8 @@ pub async fn generate_flux_1_schnell_text_to_image_handler( maybe_creator_user_token: maybe_user_session.as_ref().map(|s| &s.user_token), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: Visibility::Public, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&Visibility::Public), + mysql_executor: &mut *transaction, phantom: Default::default(), }).await; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/generate_flux_pro_11_text_to_image_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/generate_flux_pro_11_text_to_image_handler.rs index 58014f204e..6f4e8a0586 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/generate_flux_pro_11_text_to_image_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/generate_flux_pro_11_text_to_image_handler.rs @@ -12,8 +12,11 @@ use artcraft_api_defs::generate::image::text::generate_flux_1_schnell_text_to_im use artcraft_api_defs::generate::image::text::generate_flux_pro_11_text_to_image::GenerateFluxPro11TextToImageResponse; use artcraft_api_defs::generate::image::text::generate_flux_pro_11_text_to_image::{GenerateFluxPro11TextToImageAspectRatio, GenerateFluxPro11TextToImageNumImages, GenerateFluxPro11TextToImageRequest}; use enums_db::by_table::prompts::prompt_type::PromptType; +use enums_api::by_table::prompts::prompt_type::PromptType as ApiPromptType; use enums_db::common::generation::generation_provider::GenerationProvider; +use enums_api::common::generation::generation_provider::GenerationProvider as ApiGenerationProvider; use enums_db::common::model_type::ModelType; +use enums_api::common::model_type::ModelType as ApiModelType; use enums_db::common::visibility::Visibility; use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator; use fal_client::requests::webhook::image::text::enqueue_flux_pro_11_text_to_image_webhook::FluxPro11Args; @@ -158,7 +161,8 @@ pub async fn generate_flux_pro_11_text_to_image_handler( prompt_type: PromptType::ArtcraftApp, maybe_creator_user_token: Some(&user_token), maybe_model_type: Some(ModelType::FluxPro11), - maybe_generation_provider: Some(GenerationProvider::Artcraft), + maybe_generation_provider: Some(enums_convert::common::generation::generation_provider::generation_provider_to_api(&GenerationProvider::Artcraft)), + maybe_positive_prompt: request.prompt.as_deref(), maybe_negative_prompt: None, maybe_other_args: None, @@ -185,7 +189,8 @@ pub async fn generate_flux_pro_11_text_to_image_handler( maybe_creator_user_token: Some(&user_token), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: Visibility::Public, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&Visibility::Public), + mysql_executor: &mut *transaction, starting_job_status_override: None, maybe_frontend_failure_category: None, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/generate_flux_pro_11_ultra_text_to_image_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/generate_flux_pro_11_ultra_text_to_image_handler.rs index 1609384324..5d1b07e4d0 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/generate_flux_pro_11_ultra_text_to_image_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/generate_flux_pro_11_ultra_text_to_image_handler.rs @@ -12,8 +12,11 @@ use artcraft_api_defs::generate::image::text::generate_flux_pro_11_text_to_image use artcraft_api_defs::generate::image::text::generate_flux_pro_11_ultra_text_to_image::GenerateFluxPro11UltraTextToImageResponse; use artcraft_api_defs::generate::image::text::generate_flux_pro_11_ultra_text_to_image::{GenerateFluxPro11UltraTextToImageAspectRatio, GenerateFluxPro11UltraTextToImageNumImages, GenerateFluxPro11UltraTextToImageRequest}; use enums_db::by_table::prompts::prompt_type::PromptType; +use enums_api::by_table::prompts::prompt_type::PromptType as ApiPromptType; use enums_db::common::generation::generation_provider::GenerationProvider; +use enums_api::common::generation::generation_provider::GenerationProvider as ApiGenerationProvider; use enums_db::common::model_type::ModelType; +use enums_api::common::model_type::ModelType as ApiModelType; use enums_db::common::visibility::Visibility; use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator; use fal_client::requests::webhook::image::text::enqueue_flux_pro_11_ultra_text_to_image_webhook::FluxPro11UltraArgs; @@ -162,7 +165,8 @@ pub async fn generate_flux_pro_11_ultra_text_to_image_handler( prompt_type: PromptType::ArtcraftApp, maybe_creator_user_token: Some(&user_token), maybe_model_type: Some(ModelType::FluxPro11Ultra), - maybe_generation_provider: Some(GenerationProvider::Artcraft), + maybe_generation_provider: Some(enums_convert::common::generation::generation_provider::generation_provider_to_api(&GenerationProvider::Artcraft)), + maybe_positive_prompt: request.prompt.as_deref(), maybe_negative_prompt: None, maybe_other_args: None, @@ -189,7 +193,8 @@ pub async fn generate_flux_pro_11_ultra_text_to_image_handler( maybe_creator_user_token: Some(&user_token), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: Visibility::Public, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&Visibility::Public), + mysql_executor: &mut *transaction, starting_job_status_override: None, maybe_frontend_failure_category: None, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/generate_gpt_image_1_text_to_image_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/generate_gpt_image_1_text_to_image_handler.rs index 8234c544d8..7f3ee1f436 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/generate_gpt_image_1_text_to_image_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/generate_gpt_image_1_text_to_image_handler.rs @@ -12,10 +12,15 @@ use actix_web::{web, HttpRequest}; use artcraft_api_defs::generate::image::text::generate_gpt_image_1_text_to_image::{GenerateGptImage1TextToImageImageQuality, GenerateGptImage1TextToImageImageSize, GenerateGptImage1TextToImageNumImages, GenerateGptImage1TextToImageRequest, GenerateGptImage1TextToImageResponse}; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use enums_db::by_table::prompts::prompt_type::PromptType; +use enums_api::by_table::prompts::prompt_type::PromptType as ApiPromptType; use enums_db::common::generation::generation_provider::GenerationProvider; +use enums_api::common::generation::generation_provider::GenerationProvider as ApiGenerationProvider; use enums_db::common::model_type::ModelType; +use enums_api::common::model_type::ModelType as ApiModelType; use enums_db::common::payments_namespace::PaymentsNamespace; +use enums_api::common::payments_namespace::PaymentsNamespace as ApiPaymentsNamespace; use enums_db::common::stripe_subscription_status::StripeSubscriptionStatus; +use enums_api::common::stripe_subscription_status::StripeSubscriptionStatus as ApiStripeSubscriptionStatus; use enums_db::common::visibility::Visibility; use fal_client::creds::open_ai_api_key::OpenAiApiKey; use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator; @@ -88,6 +93,7 @@ pub async fn generate_gpt_image_1_text_to_image_handler( let result = find_subscription_for_owner_user_using_connection( &user_token, PaymentsNamespace::Artcraft, + &mut mysql_connection, ).await; @@ -204,7 +210,8 @@ pub async fn generate_gpt_image_1_text_to_image_handler( prompt_type: PromptType::ArtcraftApp, maybe_creator_user_token: Some(&user_token), maybe_model_type: Some(ModelType::GptImage1), - maybe_generation_provider: Some(GenerationProvider::Artcraft), + maybe_generation_provider: Some(enums_convert::common::generation::generation_provider::generation_provider_to_api(&GenerationProvider::Artcraft)), + maybe_positive_prompt: request.prompt.as_deref(), maybe_negative_prompt: None, maybe_other_args: None, @@ -231,7 +238,8 @@ pub async fn generate_gpt_image_1_text_to_image_handler( maybe_creator_user_token: Some(&user_token), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: Visibility::Public, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&Visibility::Public), + mysql_executor: &mut *transaction, starting_job_status_override: None, maybe_frontend_failure_category: None, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/inpaint/flux_dev_juggernaut_inpaint_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/inpaint/flux_dev_juggernaut_inpaint_handler.rs index 1728020b45..bb3935ee60 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/inpaint/flux_dev_juggernaut_inpaint_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/inpaint/flux_dev_juggernaut_inpaint_handler.rs @@ -11,9 +11,13 @@ use actix_web::{web, HttpRequest}; use artcraft_api_defs::generate::image::inpaint::flux_dev_juggernaut_inpaint_image::{FluxDevJuggernautInpaintImageNumImages, FluxDevJuggernautInpaintImageRequest, FluxDevJuggernautInpaintImageResponse}; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use enums_db::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType; +use enums_api::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType as ApiPromptContextSemanticType; use enums_db::by_table::prompts::prompt_type::PromptType; +use enums_api::by_table::prompts::prompt_type::PromptType as ApiPromptType; use enums_db::common::generation::generation_provider::GenerationProvider; +use enums_api::common::generation::generation_provider::GenerationProvider as ApiGenerationProvider; use enums_db::common::model_type::ModelType; +use enums_api::common::model_type::ModelType as ApiModelType; use enums_db::common::visibility::Visibility; use fal_client::creds::open_ai_api_key::OpenAiApiKey; use fal_client::requests::webhook::image::infill::enqueue_flux_dev_juggernaut_infill_webhook::{enqueue_flux_dev_juggernaut_infill_webhook, FluxDevJuggernautInfillArgs, FluxDevJuggernautInfillNumImages}; @@ -213,7 +217,8 @@ pub async fn flux_dev_juggernaut_inpaint_image_handler( // TODO(bt,2025-07-31): Should we have an "inpaint" specific variant? // Depends on how we want to model provider / feature matrices, routing, and results going forward. maybe_model_type: Some(ModelType::FluxDevJuggernaut), - maybe_generation_provider: Some(GenerationProvider::Artcraft), + maybe_generation_provider: Some(enums_convert::common::generation::generation_provider::generation_provider_to_api(&GenerationProvider::Artcraft)), + maybe_positive_prompt: request.prompt.as_deref(), maybe_negative_prompt: None, maybe_other_args: None, @@ -261,7 +266,8 @@ pub async fn flux_dev_juggernaut_inpaint_image_handler( maybe_creator_user_token: maybe_user_session.as_ref().map(|s| &s.user_token), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: Visibility::Public, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&Visibility::Public), + mysql_executor: &mut *transaction, phantom: Default::default(), }).await; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/inpaint/flux_pro_1_inpaint_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/inpaint/flux_pro_1_inpaint_handler.rs index d5b729cc64..0651b6f060 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/inpaint/flux_pro_1_inpaint_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/inpaint/flux_pro_1_inpaint_handler.rs @@ -11,9 +11,13 @@ use actix_web::{web, HttpRequest}; use artcraft_api_defs::generate::image::inpaint::flux_pro_1_inpaint_image::{FluxPro1InpaintImageNumImages, FluxPro1InpaintImageRequest, FluxPro1InpaintImageResponse}; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use enums_db::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType; +use enums_api::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType as ApiPromptContextSemanticType; use enums_db::by_table::prompts::prompt_type::PromptType; +use enums_api::by_table::prompts::prompt_type::PromptType as ApiPromptType; use enums_db::common::generation::generation_provider::GenerationProvider; +use enums_api::common::generation::generation_provider::GenerationProvider as ApiGenerationProvider; use enums_db::common::model_type::ModelType; +use enums_api::common::model_type::ModelType as ApiModelType; use enums_db::common::visibility::Visibility; use fal_client::creds::open_ai_api_key::OpenAiApiKey; use fal_client::requests::webhook::image::infill::enqueue_flux_pro_1_infill_webhook::{enqueue_flux_pro_1_infill_webhook, FluxPro1InfillArgs, FluxPro1InfillNumImages}; @@ -213,7 +217,8 @@ pub async fn flux_pro_1_inpaint_image_handler( // TODO(bt,2025-07-31): Should we have an "inpaint" specific variant? // Depends on how we want to model provider / feature matrices, routing, and results going forward. maybe_model_type: Some(ModelType::FluxPro1), - maybe_generation_provider: Some(GenerationProvider::Artcraft), + maybe_generation_provider: Some(enums_convert::common::generation::generation_provider::generation_provider_to_api(&GenerationProvider::Artcraft)), + maybe_positive_prompt: request.prompt.as_deref(), maybe_negative_prompt: None, maybe_other_args: None, @@ -261,7 +266,8 @@ pub async fn flux_pro_1_inpaint_image_handler( maybe_creator_user_token: maybe_user_session.as_ref().map(|s| &s.user_token), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: Visibility::Public, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&Visibility::Public), + mysql_executor: &mut *transaction, phantom: Default::default(), }).await; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/multi_function/bytedance_seedream_5_lite_multi_function_image_gen_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/multi_function/bytedance_seedream_5_lite_multi_function_image_gen_handler.rs index 3f013743d0..56f98a5e22 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/multi_function/bytedance_seedream_5_lite_multi_function_image_gen_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/multi_function/bytedance_seedream_5_lite_multi_function_image_gen_handler.rs @@ -226,7 +226,8 @@ pub async fn bytedance_seedream_5_lite_multi_function_image_gen_handler( prompt_type: PromptType::ArtcraftApp, maybe_creator_user_token: Some(&user_token), maybe_model_type: Some(ModelType::Seedream5Lite), - maybe_generation_provider: Some(GenerationProvider::Artcraft), + maybe_generation_provider: Some(enums_convert::common::generation::generation_provider::generation_provider_to_api(&GenerationProvider::Artcraft)), + maybe_positive_prompt: request.prompt.as_deref(), maybe_negative_prompt: None, maybe_other_args: None, @@ -272,7 +273,8 @@ pub async fn bytedance_seedream_5_lite_multi_function_image_gen_handler( maybe_creator_user_token: Some(&user_token), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: Visibility::Public, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&Visibility::Public), + mysql_executor: &mut *transaction, starting_job_status_override: None, maybe_frontend_failure_category: None, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/multi_function/bytedance_seedream_v4_multi_function_image_gen_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/multi_function/bytedance_seedream_v4_multi_function_image_gen_handler.rs index 71cca27e21..f815404f13 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/multi_function/bytedance_seedream_v4_multi_function_image_gen_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/multi_function/bytedance_seedream_v4_multi_function_image_gen_handler.rs @@ -15,9 +15,13 @@ use actix_web::{web, HttpRequest}; use artcraft_api_defs::generate::image::multi_function::bytedance_seedream_v4_multi_function_image_gen::{BytedanceSeedreamV4MultiFunctionImageGenImageSize, BytedanceSeedreamV4MultiFunctionImageGenNumImages, BytedanceSeedreamV4MultiFunctionImageGenRequest, BytedanceSeedreamV4MultiFunctionImageGenResponse}; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use enums_db::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType; +use enums_api::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType as ApiPromptContextSemanticType; use enums_db::by_table::prompts::prompt_type::PromptType; +use enums_api::by_table::prompts::prompt_type::PromptType as ApiPromptType; use enums_db::common::generation::generation_provider::GenerationProvider; +use enums_api::common::generation::generation_provider::GenerationProvider as ApiGenerationProvider; use enums_db::common::model_type::ModelType; +use enums_api::common::model_type::ModelType as ApiModelType; use enums_db::common::visibility::Visibility; use fal_client::creds::open_ai_api_key::OpenAiApiKey; use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator; @@ -250,7 +254,8 @@ pub async fn bytedance_seedream_v4_multi_function_image_gen_handler( prompt_type: PromptType::ArtcraftApp, maybe_creator_user_token: Some(&user_token), maybe_model_type: Some(ModelType::Seedream4), - maybe_generation_provider: Some(GenerationProvider::Artcraft), + maybe_generation_provider: Some(enums_convert::common::generation::generation_provider::generation_provider_to_api(&GenerationProvider::Artcraft)), + maybe_positive_prompt: request.prompt.as_deref(), maybe_negative_prompt: None, maybe_other_args: None, @@ -297,7 +302,8 @@ pub async fn bytedance_seedream_v4_multi_function_image_gen_handler( maybe_creator_user_token: Some(&user_token), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: Visibility::Public, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&Visibility::Public), + mysql_executor: &mut *transaction, starting_job_status_override: None, maybe_frontend_failure_category: None, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/multi_function/bytedance_seedream_v4p5_multi_function_image_gen_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/multi_function/bytedance_seedream_v4p5_multi_function_image_gen_handler.rs index b32ca8ee9d..c408aa5411 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/multi_function/bytedance_seedream_v4p5_multi_function_image_gen_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/multi_function/bytedance_seedream_v4p5_multi_function_image_gen_handler.rs @@ -15,9 +15,13 @@ use actix_web::{web, HttpRequest}; use artcraft_api_defs::generate::image::multi_function::bytedance_seedream_v4p5_multi_function_image_gen::{BytedanceSeedreamV4p5MultiFunctionImageGenImageSize, BytedanceSeedreamV4p5MultiFunctionImageGenNumImages, BytedanceSeedreamV4p5MultiFunctionImageGenRequest, BytedanceSeedreamV4p5MultiFunctionImageGenResponse}; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use enums_db::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType; +use enums_api::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType as ApiPromptContextSemanticType; use enums_db::by_table::prompts::prompt_type::PromptType; +use enums_api::by_table::prompts::prompt_type::PromptType as ApiPromptType; use enums_db::common::generation::generation_provider::GenerationProvider; +use enums_api::common::generation::generation_provider::GenerationProvider as ApiGenerationProvider; use enums_db::common::model_type::ModelType; +use enums_api::common::model_type::ModelType as ApiModelType; use enums_db::common::visibility::Visibility; use fal_client::creds::open_ai_api_key::OpenAiApiKey; use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator; @@ -248,7 +252,8 @@ pub async fn bytedance_seedream_v4p5_multi_function_image_gen_handler( prompt_type: PromptType::ArtcraftApp, maybe_creator_user_token: Some(&user_token), maybe_model_type: Some(ModelType::Seedream4p5), - maybe_generation_provider: Some(GenerationProvider::Artcraft), + maybe_generation_provider: Some(enums_convert::common::generation::generation_provider::generation_provider_to_api(&GenerationProvider::Artcraft)), + maybe_positive_prompt: request.prompt.as_deref(), maybe_negative_prompt: None, maybe_other_args: None, @@ -295,7 +300,8 @@ pub async fn bytedance_seedream_v4p5_multi_function_image_gen_handler( maybe_creator_user_token: Some(&user_token), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: Visibility::Public, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&Visibility::Public), + mysql_executor: &mut *transaction, starting_job_status_override: None, maybe_frontend_failure_category: None, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/multi_function/gpt_image_1p5_multi_function_image_gen_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/multi_function/gpt_image_1p5_multi_function_image_gen_handler.rs index c7d4aaf72e..94b98fab03 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/multi_function/gpt_image_1p5_multi_function_image_gen_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/multi_function/gpt_image_1p5_multi_function_image_gen_handler.rs @@ -15,11 +15,17 @@ use actix_web::{web, HttpRequest}; use artcraft_api_defs::generate::image::multi_function::gpt_image_1p5_multi_function_image_gen::{GptImage1p5MultiFunctionImageGenBackground, GptImage1p5MultiFunctionImageGenInputFidelity, GptImage1p5MultiFunctionImageGenNumImages, GptImage1p5MultiFunctionImageGenQuality, GptImage1p5MultiFunctionImageGenRequest, GptImage1p5MultiFunctionImageGenResponse, GptImage1p5MultiFunctionImageGenSize}; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use enums_db::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType; +use enums_api::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType as ApiPromptContextSemanticType; use enums_db::by_table::prompts::prompt_type::PromptType; +use enums_api::by_table::prompts::prompt_type::PromptType as ApiPromptType; use enums_db::common::generation::generation_provider::GenerationProvider; +use enums_api::common::generation::generation_provider::GenerationProvider as ApiGenerationProvider; use enums_db::common::model_type::ModelType; +use enums_api::common::model_type::ModelType as ApiModelType; use enums_db::common::payments_namespace::PaymentsNamespace; +use enums_api::common::payments_namespace::PaymentsNamespace as ApiPaymentsNamespace; use enums_db::common::stripe_subscription_status::StripeSubscriptionStatus; +use enums_api::common::stripe_subscription_status::StripeSubscriptionStatus as ApiStripeSubscriptionStatus; use enums_db::common::visibility::Visibility; use fal_client::creds::open_ai_api_key::OpenAiApiKey; use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator; @@ -96,6 +102,7 @@ pub async fn gpt_image_1p5_multi_function_image_gen_handler( let result = find_subscription_for_owner_user_using_connection( user_token, PaymentsNamespace::Artcraft, + &mut mysql_connection, ).await; @@ -338,7 +345,8 @@ pub async fn gpt_image_1p5_multi_function_image_gen_handler( prompt_type: PromptType::ArtcraftApp, maybe_creator_user_token: Some(&user_token), maybe_model_type: Some(ModelType::GptImage1p5), - maybe_generation_provider: Some(GenerationProvider::Artcraft), + maybe_generation_provider: Some(enums_convert::common::generation::generation_provider::generation_provider_to_api(&GenerationProvider::Artcraft)), + maybe_positive_prompt: request.prompt.as_deref(), maybe_negative_prompt: None, maybe_other_args: None, @@ -385,7 +393,8 @@ pub async fn gpt_image_1p5_multi_function_image_gen_handler( maybe_creator_user_token: Some(&user_token), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: Visibility::Public, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&Visibility::Public), + mysql_executor: &mut *transaction, starting_job_status_override: None, maybe_frontend_failure_category: None, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/multi_function/nano_banana_2_multi_function_image_gen_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/multi_function/nano_banana_2_multi_function_image_gen_handler.rs index ef5f601484..9a601d84ac 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/multi_function/nano_banana_2_multi_function_image_gen_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/multi_function/nano_banana_2_multi_function_image_gen_handler.rs @@ -249,7 +249,8 @@ pub async fn nano_banana_2_multi_function_image_gen_handler( prompt_type: PromptType::ArtcraftApp, maybe_creator_user_token: Some(&user_token), maybe_model_type: Some(ModelType::NanoBanana2), - maybe_generation_provider: Some(GenerationProvider::Artcraft), + maybe_generation_provider: Some(enums_convert::common::generation::generation_provider::generation_provider_to_api(&GenerationProvider::Artcraft)), + maybe_positive_prompt: request.prompt.as_deref(), maybe_negative_prompt: None, maybe_other_args: None, @@ -295,7 +296,8 @@ pub async fn nano_banana_2_multi_function_image_gen_handler( maybe_creator_user_token: Some(&user_token), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: Visibility::Public, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&Visibility::Public), + mysql_executor: &mut *transaction, starting_job_status_override: None, maybe_frontend_failure_category: None, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/multi_function/nano_banana_multi_function_image_gen_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/multi_function/nano_banana_multi_function_image_gen_handler.rs index 171abaf2f3..83f1afb2a5 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/multi_function/nano_banana_multi_function_image_gen_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/multi_function/nano_banana_multi_function_image_gen_handler.rs @@ -16,11 +16,17 @@ use artcraft_api_defs::generate::image::edit::gemini_25_flash_edit_image::{Gemin use artcraft_api_defs::generate::image::multi_function::nano_banana_multi_function_image_gen::{NanoBananaMultiFunctionImageGenAspectRatio, NanoBananaMultiFunctionImageGenNumImages, NanoBananaMultiFunctionImageGenRequest, NanoBananaMultiFunctionImageGenResponse}; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use enums_db::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType; +use enums_api::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType as ApiPromptContextSemanticType; use enums_db::by_table::prompts::prompt_type::PromptType; +use enums_api::by_table::prompts::prompt_type::PromptType as ApiPromptType; use enums_db::common::generation::generation_provider::GenerationProvider; +use enums_api::common::generation::generation_provider::GenerationProvider as ApiGenerationProvider; use enums_db::common::model_type::ModelType; +use enums_api::common::model_type::ModelType as ApiModelType; use enums_db::common::payments_namespace::PaymentsNamespace; +use enums_api::common::payments_namespace::PaymentsNamespace as ApiPaymentsNamespace; use enums_db::common::stripe_subscription_status::StripeSubscriptionStatus; +use enums_api::common::stripe_subscription_status::StripeSubscriptionStatus as ApiStripeSubscriptionStatus; use enums_db::common::visibility::Visibility; use fal_client::creds::open_ai_api_key::OpenAiApiKey; use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator; @@ -99,6 +105,7 @@ pub async fn nano_banana_multi_function_image_gen_handler( let result = find_subscription_for_owner_user_using_connection( user_token, PaymentsNamespace::Artcraft, + &mut mysql_connection, ).await; @@ -281,7 +288,8 @@ pub async fn nano_banana_multi_function_image_gen_handler( prompt_type: PromptType::ArtcraftApp, maybe_creator_user_token: Some(&user_token), maybe_model_type: Some(ModelType::NanoBanana), - maybe_generation_provider: Some(GenerationProvider::Artcraft), + maybe_generation_provider: Some(enums_convert::common::generation::generation_provider::generation_provider_to_api(&GenerationProvider::Artcraft)), + maybe_positive_prompt: request.prompt.as_deref(), maybe_negative_prompt: None, maybe_other_args: None, @@ -328,7 +336,8 @@ pub async fn nano_banana_multi_function_image_gen_handler( maybe_creator_user_token: Some(&user_token), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: Visibility::Public, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&Visibility::Public), + mysql_executor: &mut *transaction, starting_job_status_override: None, maybe_frontend_failure_category: None, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/multi_function/nano_banana_pro_multi_function_image_gen_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/multi_function/nano_banana_pro_multi_function_image_gen_handler.rs index 0434e11329..df7e6d92bb 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/multi_function/nano_banana_pro_multi_function_image_gen_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/multi_function/nano_banana_pro_multi_function_image_gen_handler.rs @@ -15,11 +15,17 @@ use actix_web::{web, HttpRequest}; use artcraft_api_defs::generate::image::multi_function::nano_banana_pro_multi_function_image_gen::{NanoBananaProMultiFunctionImageGenAspectRatio, NanoBananaProMultiFunctionImageGenImageResolution, NanoBananaProMultiFunctionImageGenNumImages, NanoBananaProMultiFunctionImageGenRequest, NanoBananaProMultiFunctionImageGenResponse}; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use enums_db::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType; +use enums_api::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType as ApiPromptContextSemanticType; use enums_db::by_table::prompts::prompt_type::PromptType; +use enums_api::by_table::prompts::prompt_type::PromptType as ApiPromptType; use enums_db::common::generation::generation_provider::GenerationProvider; +use enums_api::common::generation::generation_provider::GenerationProvider as ApiGenerationProvider; use enums_db::common::model_type::ModelType; +use enums_api::common::model_type::ModelType as ApiModelType; use enums_db::common::payments_namespace::PaymentsNamespace; +use enums_api::common::payments_namespace::PaymentsNamespace as ApiPaymentsNamespace; use enums_db::common::stripe_subscription_status::StripeSubscriptionStatus; +use enums_api::common::stripe_subscription_status::StripeSubscriptionStatus as ApiStripeSubscriptionStatus; use enums_db::common::visibility::Visibility; use fal_client::creds::open_ai_api_key::OpenAiApiKey; use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator; @@ -96,6 +102,7 @@ pub async fn nano_banana_pro_multi_function_image_gen_handler( let result = find_subscription_for_owner_user_using_connection( user_token, PaymentsNamespace::Artcraft, + &mut mysql_connection, ).await; @@ -296,7 +303,8 @@ pub async fn nano_banana_pro_multi_function_image_gen_handler( prompt_type: PromptType::ArtcraftApp, maybe_creator_user_token: Some(&user_token), maybe_model_type: Some(ModelType::NanoBananaPro), - maybe_generation_provider: Some(GenerationProvider::Artcraft), + maybe_generation_provider: Some(enums_convert::common::generation::generation_provider::generation_provider_to_api(&GenerationProvider::Artcraft)), + maybe_positive_prompt: request.prompt.as_deref(), maybe_negative_prompt: None, maybe_other_args: None, @@ -343,7 +351,8 @@ pub async fn nano_banana_pro_multi_function_image_gen_handler( maybe_creator_user_token: Some(&user_token), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: Visibility::Public, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&Visibility::Public), + mysql_executor: &mut *transaction, starting_job_status_override: None, maybe_frontend_failure_category: None, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/remove_image_background_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/remove_image_background_handler.rs index 4349f74493..cfd774ec6d 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/remove_image_background_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/remove_image_background_handler.rs @@ -10,7 +10,7 @@ use actix_web::{web, HttpRequest}; use artcraft_api_defs::generate::image::bg_removal::remove_image_background::RemoveImageBackgroundRequest; use artcraft_api_defs::generate::image::bg_removal::remove_image_background::RemoveImageBackgroundResponse; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; -use enums_db::common::visibility::Visibility; +use enums_api::common::visibility::Visibility; use fal_client::requests::webhook::image::background::remove_background_rembg_webhook::{remove_background_rembg_webhook, RemoveBackgroundRembgWebhookArgs}; use http_server_common::request::get_request_ip::get_request_ip; use log::{error, info, warn}; @@ -155,7 +155,8 @@ pub async fn remove_image_background_handler( maybe_creator_user_token: maybe_user_session.as_ref().map(|s| &s.user_token), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: Visibility::Public, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&Visibility::Public), + mysql_executor: &mut *mysql_connection, phantom: Default::default(), }).await; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/object/generate_hunyuan_2_0_image_to_3d_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/object/generate_hunyuan_2_0_image_to_3d_handler.rs index b968a1ffa5..4ec2a16ea9 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/object/generate_hunyuan_2_0_image_to_3d_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/object/generate_hunyuan_2_0_image_to_3d_handler.rs @@ -10,7 +10,7 @@ use actix_web::{web, HttpRequest}; use artcraft_api_defs::generate::object::generate_hunyuan_2_0_image_to_3d::GenerateHunyuan20ImageTo3dRequest; use artcraft_api_defs::generate::object::generate_hunyuan_2_0_image_to_3d::GenerateHunyuan20ImageTo3dResponse; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; -use enums_db::common::visibility::Visibility; +use enums_api::common::visibility::Visibility; use fal_client::requests::webhook::object::enqueue_hunyuan_3d_2_image_to_3d_webhook::enqueue_hunyuan_3d_2_image_to_3d_webhook; use fal_client::requests::webhook::object::enqueue_hunyuan_3d_2_image_to_3d_webhook::Hunyuan3d2Args; use http_server_common::request::get_request_ip::get_request_ip; @@ -154,7 +154,8 @@ pub async fn generate_hunyuan_2_0_image_to_3d_handler( maybe_creator_user_token: maybe_user_session.as_ref().map(|s| &s.user_token), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: Visibility::Public, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&Visibility::Public), + mysql_executor: &mut *mysql_connection, phantom: Default::default(), }).await; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/object/generate_hunyuan_2_1_image_to_3d_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/object/generate_hunyuan_2_1_image_to_3d_handler.rs index c55b1cfa23..d8b10bb21a 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/object/generate_hunyuan_2_1_image_to_3d_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/object/generate_hunyuan_2_1_image_to_3d_handler.rs @@ -10,7 +10,7 @@ use actix_web::{web, HttpRequest}; use artcraft_api_defs::generate::object::generate_hunyuan_2_1_image_to_3d::GenerateHunyuan21ImageTo3dRequest; use artcraft_api_defs::generate::object::generate_hunyuan_2_1_image_to_3d::GenerateHunyuan21ImageTo3dResponse; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; -use enums_db::common::visibility::Visibility; +use enums_api::common::visibility::Visibility; use fal_client::requests::webhook::object::enqueue_hunyuan_3d_21_image_to_3d_webhook::enqueue_hunyuan_3d_2_1_image_to_3d_webhook; use fal_client::requests::webhook::object::enqueue_hunyuan_3d_21_image_to_3d_webhook::Hunyuan3d21Args; use http_server_common::request::get_request_ip::get_request_ip; @@ -154,7 +154,8 @@ pub async fn generate_hunyuan_2_1_image_to_3d_handler( maybe_creator_user_token: maybe_user_session.as_ref().map(|s| &s.user_token), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: Visibility::Public, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&Visibility::Public), + mysql_executor: &mut *mysql_connection, phantom: Default::default(), }).await; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/object/multi_function/generate_hunyuan3d_v3_multi_function_object_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/object/multi_function/generate_hunyuan3d_v3_multi_function_object_handler.rs index 73718936a4..99cb30e714 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/object/multi_function/generate_hunyuan3d_v3_multi_function_object_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/object/multi_function/generate_hunyuan3d_v3_multi_function_object_handler.rs @@ -303,7 +303,8 @@ pub async fn generate_hunyuan3d_v3_multi_function_object_handler( prompt_type: PromptType::ArtcraftApp, maybe_creator_user_token: maybe_user_session.as_ref().map(|s| &s.user_token), maybe_model_type: Some(ModelType::Hunyuan3d3), - maybe_generation_provider: Some(GenerationProvider::Artcraft), + maybe_generation_provider: Some(enums_convert::common::generation::generation_provider::generation_provider_to_api(&GenerationProvider::Artcraft)), + maybe_positive_prompt: request.prompt.as_deref(), maybe_negative_prompt: None, maybe_other_args: None, @@ -374,7 +375,8 @@ pub async fn generate_hunyuan3d_v3_multi_function_object_handler( maybe_creator_user_token: maybe_user_session.as_ref().map(|s| &s.user_token), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: Visibility::Public, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&Visibility::Public), + mysql_executor: &mut *transaction, phantom: Default::default(), }) diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/splat/generate_worldlabs_marble_0p1_mini_splat_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/splat/generate_worldlabs_marble_0p1_mini_splat_handler.rs index cf5fa29b06..2c734a9c6c 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/splat/generate_worldlabs_marble_0p1_mini_splat_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/splat/generate_worldlabs_marble_0p1_mini_splat_handler.rs @@ -175,7 +175,8 @@ pub async fn generate_worldlabs_marble_0p1_mini_splat_handler( prompt_type: PromptType::ArtcraftApp, maybe_creator_user_token: Some(user_token), maybe_model_type: Some(ModelType::Marble0p1Mini), - maybe_generation_provider: Some(GenerationProvider::Artcraft), + maybe_generation_provider: Some(enums_convert::common::generation::generation_provider::generation_provider_to_api(&GenerationProvider::Artcraft)), + maybe_positive_prompt: request.prompt.as_deref(), maybe_negative_prompt: None, maybe_other_args: None, @@ -221,7 +222,8 @@ pub async fn generate_worldlabs_marble_0p1_mini_splat_handler( maybe_creator_user_token: Some(user_token), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: Visibility::Public, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&Visibility::Public), + mysql_executor: &mut *transaction, phantom: Default::default(), }).await; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/splat/generate_worldlabs_marble_0p1_plus_splat_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/splat/generate_worldlabs_marble_0p1_plus_splat_handler.rs index 59dd04c7f5..43bad4644e 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/splat/generate_worldlabs_marble_0p1_plus_splat_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/splat/generate_worldlabs_marble_0p1_plus_splat_handler.rs @@ -175,7 +175,8 @@ pub async fn generate_worldlabs_marble_0p1_plus_splat_handler( prompt_type: PromptType::ArtcraftApp, maybe_creator_user_token: Some(user_token), maybe_model_type: Some(ModelType::Marble0p1Plus), - maybe_generation_provider: Some(GenerationProvider::Artcraft), + maybe_generation_provider: Some(enums_convert::common::generation::generation_provider::generation_provider_to_api(&GenerationProvider::Artcraft)), + maybe_positive_prompt: request.prompt.as_deref(), maybe_negative_prompt: None, maybe_other_args: None, @@ -221,7 +222,8 @@ pub async fn generate_worldlabs_marble_0p1_plus_splat_handler( maybe_creator_user_token: Some(user_token), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: Visibility::Public, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&Visibility::Public), + mysql_executor: &mut *transaction, phantom: Default::default(), }).await; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/generate_kling_1_6_pro_video_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/generate_kling_1_6_pro_video_handler.rs index 8b79f9a426..15d6919752 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/generate_kling_1_6_pro_video_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/generate_kling_1_6_pro_video_handler.rs @@ -15,8 +15,11 @@ use artcraft_api_defs::generate::video::generate_kling_1_6_pro_image_to_video::{ use artcraft_api_defs::generate::video::generate_kling_1_6_pro_image_to_video::{GenerateKling16ProDuration, GenerateKling16ProImageToVideoResponse}; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use enums_db::by_table::prompts::prompt_type::PromptType; +use enums_api::by_table::prompts::prompt_type::PromptType as ApiPromptType; use enums_db::common::generation::generation_provider::GenerationProvider; +use enums_api::common::generation::generation_provider::GenerationProvider as ApiGenerationProvider; use enums_db::common::model_type::ModelType; +use enums_api::common::model_type::ModelType as ApiModelType; use enums_db::common::visibility::Visibility; use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator; use fal_client::requests::webhook::video::image::enqueue_kling_v1p6_pro_image_to_video_webhook::{enqueue_kling_v1p6_pro_image_to_video_webhook, Kling1p6ProArgs, Kling1p6ProAspectRatio, Kling1p6ProDuration}; @@ -217,7 +220,8 @@ pub async fn generate_kling_1_6_pro_video_handler( .as_ref() .map(|s| &s.user_token), maybe_model_type: Some(ModelType::Kling16Pro), - maybe_generation_provider: Some(GenerationProvider::Artcraft), + maybe_generation_provider: Some(enums_convert::common::generation::generation_provider::generation_provider_to_api(&GenerationProvider::Artcraft)), + maybe_positive_prompt: Some(prompt), maybe_negative_prompt: None, maybe_other_args: None, @@ -246,7 +250,8 @@ pub async fn generate_kling_1_6_pro_video_handler( maybe_creator_user_token: maybe_user_session.as_ref().map(|s| &s.user_token), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: Visibility::Public, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&Visibility::Public), + mysql_executor: &mut *transaction, starting_job_status_override: None, maybe_frontend_failure_category: None, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/generate_kling_2_1_master_video_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/generate_kling_2_1_master_video_handler.rs index e3e7ed8ac3..b7fff43445 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/generate_kling_2_1_master_video_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/generate_kling_2_1_master_video_handler.rs @@ -13,8 +13,11 @@ use artcraft_api_defs::generate::video::generate_kling_2_1_master_image_to_video use artcraft_api_defs::generate::video::generate_kling_2_1_master_image_to_video::{GenerateKling21MasterDuration, GenerateKling21MasterImageToVideoResponse}; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use enums_db::by_table::prompts::prompt_type::PromptType; +use enums_api::by_table::prompts::prompt_type::PromptType as ApiPromptType; use enums_db::common::generation::generation_provider::GenerationProvider; +use enums_api::common::generation::generation_provider::GenerationProvider as ApiGenerationProvider; use enums_db::common::model_type::ModelType; +use enums_api::common::model_type::ModelType as ApiModelType; use enums_db::common::visibility::Visibility; use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator; use fal_client::requests::webhook::video::image::enqueue_kling_v2p1_master_image_to_video_webhook::{enqueue_kling_v2p1_master_image_to_video_webhook, Kling2p1MasterArgs, Kling2p1MasterAspectRatio, Kling2p1MasterDuration}; @@ -204,7 +207,8 @@ pub async fn generate_kling_2_1_master_video_handler( .as_ref() .map(|s| &s.user_token), maybe_model_type: Some(ModelType::Kling21Master), - maybe_generation_provider: Some(GenerationProvider::Artcraft), + maybe_generation_provider: Some(enums_convert::common::generation::generation_provider::generation_provider_to_api(&GenerationProvider::Artcraft)), + maybe_positive_prompt: Some(prompt), maybe_negative_prompt: None, maybe_other_args: None, @@ -231,7 +235,8 @@ pub async fn generate_kling_2_1_master_video_handler( maybe_creator_user_token: maybe_user_session.as_ref().map(|s| &s.user_token), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: Visibility::Public, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&Visibility::Public), + mysql_executor: &mut *transaction, starting_job_status_override: None, maybe_frontend_failure_category: None, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/generate_kling_2_1_pro_video_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/generate_kling_2_1_pro_video_handler.rs index f61c7ad57d..d25ac055a3 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/generate_kling_2_1_pro_video_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/generate_kling_2_1_pro_video_handler.rs @@ -15,8 +15,11 @@ use artcraft_api_defs::generate::video::generate_kling_2_1_pro_image_to_video::{ use artcraft_api_defs::generate::video::generate_kling_2_1_pro_image_to_video::{GenerateKling21ProDuration, GenerateKling21ProImageToVideoResponse}; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use enums_db::by_table::prompts::prompt_type::PromptType; +use enums_api::by_table::prompts::prompt_type::PromptType as ApiPromptType; use enums_db::common::generation::generation_provider::GenerationProvider; +use enums_api::common::generation::generation_provider::GenerationProvider as ApiGenerationProvider; use enums_db::common::model_type::ModelType; +use enums_api::common::model_type::ModelType as ApiModelType; use enums_db::common::visibility::Visibility; use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator; use fal_client::requests::webhook::video::image::enqueue_kling_v2p1_pro_image_to_video_webhook::enqueue_kling_v2p1_pro_image_to_video_webhook; @@ -219,7 +222,8 @@ pub async fn generate_kling_2_1_pro_video_handler( .as_ref() .map(|s| &s.user_token), maybe_model_type: Some(ModelType::Kling21Pro), - maybe_generation_provider: Some(GenerationProvider::Artcraft), + maybe_generation_provider: Some(enums_convert::common::generation::generation_provider::generation_provider_to_api(&GenerationProvider::Artcraft)), + maybe_positive_prompt: Some(prompt), maybe_negative_prompt: None, maybe_other_args: None, @@ -246,7 +250,8 @@ pub async fn generate_kling_2_1_pro_video_handler( maybe_creator_user_token: maybe_user_session.as_ref().map(|s| &s.user_token), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: Visibility::Public, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&Visibility::Public), + mysql_executor: &mut *transaction, starting_job_status_override: None, maybe_frontend_failure_category: None, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/generate_seedance_1_0_lite_image_to_video_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/generate_seedance_1_0_lite_image_to_video_handler.rs index 624de58f51..682449b103 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/generate_seedance_1_0_lite_image_to_video_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/generate_seedance_1_0_lite_image_to_video_handler.rs @@ -17,8 +17,11 @@ use artcraft_api_defs::generate::video::generate_seedance_1_0_lite_image_to_vide use artcraft_api_defs::generate::video::generate_seedance_1_0_lite_image_to_video::{GenerateSeedance10LiteAspectRatio, GenerateSeedance10LiteDuration}; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use enums_db::by_table::prompts::prompt_type::PromptType; +use enums_api::by_table::prompts::prompt_type::PromptType as ApiPromptType; use enums_db::common::generation::generation_provider::GenerationProvider; +use enums_api::common::generation::generation_provider::GenerationProvider as ApiGenerationProvider; use enums_db::common::model_type::ModelType; +use enums_api::common::model_type::ModelType as ApiModelType; use enums_db::common::visibility::Visibility; use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator; use fal_client::requests::webhook::video::image::enqueue_seedance_1_lite_image_to_video_webhook::Seedance1LiteDuration; @@ -234,7 +237,8 @@ pub async fn generate_seedance_1_0_lite_image_to_video_handler( .as_ref() .map(|s| &s.user_token), maybe_model_type: Some(ModelType::Seedance10Lite), - maybe_generation_provider: Some(GenerationProvider::Artcraft), + maybe_generation_provider: Some(enums_convert::common::generation::generation_provider::generation_provider_to_api(&GenerationProvider::Artcraft)), + maybe_positive_prompt: Some(prompt), maybe_negative_prompt: None, maybe_other_args: None, @@ -261,7 +265,8 @@ pub async fn generate_seedance_1_0_lite_image_to_video_handler( maybe_creator_user_token: maybe_user_session.as_ref().map(|s| &s.user_token), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: Visibility::Public, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&Visibility::Public), + mysql_executor: &mut *transaction, starting_job_status_override: None, maybe_frontend_failure_category: None, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/generate_seedance_1_0_pro_image_to_video_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/generate_seedance_1_0_pro_image_to_video_handler.rs index 322b1153c6..c0ee239557 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/generate_seedance_1_0_pro_image_to_video_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/generate_seedance_1_0_pro_image_to_video_handler.rs @@ -17,8 +17,11 @@ use artcraft_api_defs::generate::video::generate_seedance_1_0_pro_image_to_video use artcraft_api_defs::generate::video::generate_seedance_1_0_pro_image_to_video::GenerateSeedance10ProResolution; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use enums_db::by_table::prompts::prompt_type::PromptType; +use enums_api::by_table::prompts::prompt_type::PromptType as ApiPromptType; use enums_db::common::generation::generation_provider::GenerationProvider; +use enums_api::common::generation::generation_provider::GenerationProvider as ApiGenerationProvider; use enums_db::common::model_type::ModelType; +use enums_api::common::model_type::ModelType as ApiModelType; use enums_db::common::visibility::Visibility; use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator; use fal_client::requests::webhook::video::image::enqueue_seedance_1_pro_image_to_video_webhook::enqueue_seedance_1_pro_image_to_video_webhook; @@ -211,7 +214,8 @@ pub async fn generate_seedance_1_0_pro_image_to_video_handler( .as_ref() .map(|s| &s.user_token), maybe_model_type: Some(ModelType::Seedance10Pro), - maybe_generation_provider: Some(GenerationProvider::Artcraft), + maybe_generation_provider: Some(enums_convert::common::generation::generation_provider::generation_provider_to_api(&GenerationProvider::Artcraft)), + maybe_positive_prompt: Some(prompt), maybe_negative_prompt: None, maybe_other_args: None, @@ -238,7 +242,8 @@ pub async fn generate_seedance_1_0_pro_image_to_video_handler( maybe_creator_user_token: maybe_user_session.as_ref().map(|s| &s.user_token), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: Visibility::Public, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&Visibility::Public), + mysql_executor: &mut *transaction, starting_job_status_override: None, maybe_frontend_failure_category: None, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/generate_veo_2_image_to_video_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/generate_veo_2_image_to_video_handler.rs index 26e29a401b..2464b65168 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/generate_veo_2_image_to_video_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/generate_veo_2_image_to_video_handler.rs @@ -17,8 +17,11 @@ use artcraft_api_defs::generate::video::generate_veo_2_image_to_video::GenerateV use artcraft_api_defs::generate::video::generate_veo_2_image_to_video::GenerateVeo2ImageToVideoResponse; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use enums_db::by_table::prompts::prompt_type::PromptType; +use enums_api::by_table::prompts::prompt_type::PromptType as ApiPromptType; use enums_db::common::generation::generation_provider::GenerationProvider; +use enums_api::common::generation::generation_provider::GenerationProvider as ApiGenerationProvider; use enums_db::common::model_type::ModelType; +use enums_api::common::model_type::ModelType as ApiModelType; use enums_db::common::visibility::Visibility; use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator; use fal_client::requests::webhook::video::image::enqueue_veo_2_image_to_video_webhook::enqueue_veo_2_image_to_video_webhook; @@ -215,7 +218,8 @@ pub async fn generate_veo_2_image_to_video_handler( .as_ref() .map(|s| &s.user_token), maybe_model_type: Some(ModelType::Veo2), - maybe_generation_provider: Some(GenerationProvider::Artcraft), + maybe_generation_provider: Some(enums_convert::common::generation::generation_provider::generation_provider_to_api(&GenerationProvider::Artcraft)), + maybe_positive_prompt: Some(prompt), maybe_negative_prompt: None, maybe_other_args: None, @@ -244,7 +248,8 @@ pub async fn generate_veo_2_image_to_video_handler( .map(|s| &s.user_token), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: Visibility::Public, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&Visibility::Public), + mysql_executor: &mut *transaction, starting_job_status_override: None, maybe_frontend_failure_category: None, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/generate_veo_3_fast_image_to_video_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/generate_veo_3_fast_image_to_video_handler.rs index a7ff9ee597..d7b3f0dc2a 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/generate_veo_3_fast_image_to_video_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/generate_veo_3_fast_image_to_video_handler.rs @@ -14,8 +14,11 @@ use anyhow::anyhow; use artcraft_api_defs::generate::video::generate_veo_3_fast_image_to_video::{GenerateVeo3FastDuration, GenerateVeo3FastImageToVideoRequest, GenerateVeo3FastImageToVideoResponse, GenerateVeo3FastResolution}; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use enums_db::by_table::prompts::prompt_type::PromptType; +use enums_api::by_table::prompts::prompt_type::PromptType as ApiPromptType; use enums_db::common::generation::generation_provider::GenerationProvider; +use enums_api::common::generation::generation_provider::GenerationProvider as ApiGenerationProvider; use enums_db::common::model_type::ModelType; +use enums_api::common::model_type::ModelType as ApiModelType; use enums_db::common::visibility::Visibility; use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator; use fal_client::requests::webhook::video::image::enqueue_veo_3_fast_image_to_video_webhook::{enqueue_veo_3_fast_image_to_video_webhook, Veo3FastArgs, Veo3FastDuration, Veo3FastResolution}; @@ -208,7 +211,8 @@ pub async fn generate_veo_3_fast_image_to_video_handler( .as_ref() .map(|s| &s.user_token), maybe_model_type: Some(ModelType::Veo3Fast), - maybe_generation_provider: Some(GenerationProvider::Artcraft), + maybe_generation_provider: Some(enums_convert::common::generation::generation_provider::generation_provider_to_api(&GenerationProvider::Artcraft)), + maybe_positive_prompt: Some(prompt), maybe_negative_prompt: None, maybe_other_args: None, @@ -237,7 +241,8 @@ pub async fn generate_veo_3_fast_image_to_video_handler( .map(|s| &s.user_token), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: Visibility::Public, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&Visibility::Public), + mysql_executor: &mut *transaction, starting_job_status_override: None, maybe_frontend_failure_category: None, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/generate_veo_3_image_to_video_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/generate_veo_3_image_to_video_handler.rs index 2743870c32..8378071adf 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/generate_veo_3_image_to_video_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/generate_veo_3_image_to_video_handler.rs @@ -14,8 +14,11 @@ use anyhow::anyhow; use artcraft_api_defs::generate::video::generate_veo_3_image_to_video::{GenerateVeo3AspectRatio, GenerateVeo3Duration, GenerateVeo3ImageToVideoRequest, GenerateVeo3ImageToVideoResponse, GenerateVeo3Resolution}; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use enums_db::by_table::prompts::prompt_type::PromptType; +use enums_api::by_table::prompts::prompt_type::PromptType as ApiPromptType; use enums_db::common::generation::generation_provider::GenerationProvider; +use enums_api::common::generation::generation_provider::GenerationProvider as ApiGenerationProvider; use enums_db::common::model_type::ModelType; +use enums_api::common::model_type::ModelType as ApiModelType; use enums_db::common::visibility::Visibility; use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator; use fal_client::requests::webhook::video::image::enqueue_veo_3_image_to_video_webhook::{enqueue_veo_3_image_to_video_webhook, Veo3Args, Veo3AspectRatio, Veo3Duration, Veo3Resolution}; @@ -216,7 +219,8 @@ pub async fn generate_veo_3_image_to_video_handler( .as_ref() .map(|s| &s.user_token), maybe_model_type: Some(ModelType::Veo3), - maybe_generation_provider: Some(GenerationProvider::Artcraft), + maybe_generation_provider: Some(enums_convert::common::generation::generation_provider::generation_provider_to_api(&GenerationProvider::Artcraft)), + maybe_positive_prompt: Some(prompt), maybe_negative_prompt: None, maybe_other_args: None, @@ -245,7 +249,8 @@ pub async fn generate_veo_3_image_to_video_handler( .map(|s| &s.user_token), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: Visibility::Public, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&Visibility::Public), + mysql_executor: &mut *transaction, starting_job_status_override: None, maybe_frontend_failure_category: None, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/multi_function/kling_2p5_turbo_pro_multi_function_video_gen_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/multi_function/kling_2p5_turbo_pro_multi_function_video_gen_handler.rs index a50e2ea8b7..f43b4032d8 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/multi_function/kling_2p5_turbo_pro_multi_function_video_gen_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/multi_function/kling_2p5_turbo_pro_multi_function_video_gen_handler.rs @@ -15,9 +15,13 @@ use actix_web::{web, HttpRequest}; use artcraft_api_defs::generate::video::multi_function::kling_2_5_turbo_multi_function_video_gen::{Kling2p5TurboProMultiFunctionVideoGenAspectRatio, Kling2p5TurboProMultiFunctionVideoGenDuration, Kling2p5TurboProMultiFunctionVideoGenRequest, Kling2p5TurboProMultiFunctionVideoGenResponse}; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use enums_db::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType; +use enums_api::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType as ApiPromptContextSemanticType; use enums_db::by_table::prompts::prompt_type::PromptType; +use enums_api::by_table::prompts::prompt_type::PromptType as ApiPromptType; use enums_db::common::generation::generation_provider::GenerationProvider; +use enums_api::common::generation::generation_provider::GenerationProvider as ApiGenerationProvider; use enums_db::common::model_type::ModelType; +use enums_api::common::model_type::ModelType as ApiModelType; use enums_db::common::visibility::Visibility; use fal_client::creds::open_ai_api_key::OpenAiApiKey; use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator; @@ -257,7 +261,8 @@ pub async fn kling_2p5_turbo_pro_multi_function_video_gen_handler( .as_ref() .map(|s| &s.user_token), maybe_model_type: Some(ModelType::Kling2p5TurboPro), - maybe_generation_provider: Some(GenerationProvider::Artcraft), + maybe_generation_provider: Some(enums_convert::common::generation::generation_provider::generation_provider_to_api(&GenerationProvider::Artcraft)), + maybe_positive_prompt: request.prompt.as_deref(), maybe_negative_prompt: None, maybe_other_args: None, @@ -315,7 +320,8 @@ pub async fn kling_2p5_turbo_pro_multi_function_video_gen_handler( maybe_creator_user_token: maybe_user_session.as_ref().map(|s| &s.user_token), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: Visibility::Public, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&Visibility::Public), + mysql_executor: &mut *transaction, starting_job_status_override: None, maybe_frontend_failure_category: None, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/multi_function/kling_2p6_pro_multi_function_video_gen_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/multi_function/kling_2p6_pro_multi_function_video_gen_handler.rs index 11847e0720..b08104c6e3 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/multi_function/kling_2p6_pro_multi_function_video_gen_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/multi_function/kling_2p6_pro_multi_function_video_gen_handler.rs @@ -15,9 +15,13 @@ use actix_web::{web, HttpRequest}; use artcraft_api_defs::generate::video::multi_function::kling_2_6_multi_function_video_gen::{Kling2p6ProMultiFunctionVideoGenAspectRatio, Kling2p6ProMultiFunctionVideoGenDuration, Kling2p6ProMultiFunctionVideoGenRequest, Kling2p6ProMultiFunctionVideoGenResponse}; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use enums_db::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType; +use enums_api::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType as ApiPromptContextSemanticType; use enums_db::by_table::prompts::prompt_type::PromptType; +use enums_api::by_table::prompts::prompt_type::PromptType as ApiPromptType; use enums_db::common::generation::generation_provider::GenerationProvider; +use enums_api::common::generation::generation_provider::GenerationProvider as ApiGenerationProvider; use enums_db::common::model_type::ModelType; +use enums_api::common::model_type::ModelType as ApiModelType; use enums_db::common::visibility::Visibility; use fal_client::creds::open_ai_api_key::OpenAiApiKey; use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator; @@ -256,7 +260,8 @@ pub async fn kling_2p6_pro_multi_function_video_gen_handler( .as_ref() .map(|s| &s.user_token), maybe_model_type: Some(ModelType::Kling2p6Pro), - maybe_generation_provider: Some(GenerationProvider::Artcraft), + maybe_generation_provider: Some(enums_convert::common::generation::generation_provider::generation_provider_to_api(&GenerationProvider::Artcraft)), + maybe_positive_prompt: request.prompt.as_deref(), maybe_negative_prompt: None, maybe_other_args: None, @@ -314,7 +319,8 @@ pub async fn kling_2p6_pro_multi_function_video_gen_handler( maybe_creator_user_token: maybe_user_session.as_ref().map(|s| &s.user_token), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: Visibility::Public, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&Visibility::Public), + mysql_executor: &mut *transaction, starting_job_status_override: None, maybe_frontend_failure_category: None, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/multi_function/kling_3p0_pro_multi_function_video_gen_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/multi_function/kling_3p0_pro_multi_function_video_gen_handler.rs index a5a3ac1d4b..9370fef974 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/multi_function/kling_3p0_pro_multi_function_video_gen_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/multi_function/kling_3p0_pro_multi_function_video_gen_handler.rs @@ -15,9 +15,13 @@ use actix_web::{web, HttpRequest}; use artcraft_api_defs::generate::video::multi_function::kling_3p0_pro_multi_function_video_gen::{Kling3p0ProMultiFunctionVideoGenAspectRatio, Kling3p0ProMultiFunctionVideoGenDuration, Kling3p0ProMultiFunctionVideoGenRequest, Kling3p0ProMultiFunctionVideoGenResponse}; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use enums_db::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType; +use enums_api::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType as ApiPromptContextSemanticType; use enums_db::by_table::prompts::prompt_type::PromptType; +use enums_api::by_table::prompts::prompt_type::PromptType as ApiPromptType; use enums_db::common::generation::generation_provider::GenerationProvider; +use enums_api::common::generation::generation_provider::GenerationProvider as ApiGenerationProvider; use enums_db::common::model_type::ModelType; +use enums_api::common::model_type::ModelType as ApiModelType; use enums_db::common::visibility::Visibility; use fal_client::creds::open_ai_api_key::OpenAiApiKey; use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator; @@ -305,7 +309,8 @@ pub async fn kling_3p0_pro_multi_function_video_gen_handler( .as_ref() .map(|s| &s.user_token), maybe_model_type: Some(ModelType::Kling3p0Pro), - maybe_generation_provider: Some(GenerationProvider::Artcraft), + maybe_generation_provider: Some(enums_convert::common::generation::generation_provider::generation_provider_to_api(&GenerationProvider::Artcraft)), + maybe_positive_prompt: request.prompt.as_deref(), maybe_negative_prompt: None, maybe_other_args: None, @@ -363,7 +368,8 @@ pub async fn kling_3p0_pro_multi_function_video_gen_handler( maybe_creator_user_token: maybe_user_session.as_ref().map(|s| &s.user_token), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: Visibility::Public, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&Visibility::Public), + mysql_executor: &mut *transaction, starting_job_status_override: None, maybe_frontend_failure_category: None, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/multi_function/kling_3p0_standard_multi_function_video_gen_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/multi_function/kling_3p0_standard_multi_function_video_gen_handler.rs index 6170362c86..e2f35a4083 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/multi_function/kling_3p0_standard_multi_function_video_gen_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/multi_function/kling_3p0_standard_multi_function_video_gen_handler.rs @@ -15,9 +15,13 @@ use actix_web::{web, HttpRequest}; use artcraft_api_defs::generate::video::multi_function::kling_3p0_standard_multi_function_video_gen::{Kling3p0StandardMultiFunctionVideoGenAspectRatio, Kling3p0StandardMultiFunctionVideoGenDuration, Kling3p0StandardMultiFunctionVideoGenRequest, Kling3p0StandardMultiFunctionVideoGenResponse}; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use enums_db::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType; +use enums_api::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType as ApiPromptContextSemanticType; use enums_db::by_table::prompts::prompt_type::PromptType; +use enums_api::by_table::prompts::prompt_type::PromptType as ApiPromptType; use enums_db::common::generation::generation_provider::GenerationProvider; +use enums_api::common::generation::generation_provider::GenerationProvider as ApiGenerationProvider; use enums_db::common::model_type::ModelType; +use enums_api::common::model_type::ModelType as ApiModelType; use enums_db::common::visibility::Visibility; use fal_client::creds::open_ai_api_key::OpenAiApiKey; use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator; @@ -305,7 +309,8 @@ pub async fn kling_3p0_standard_multi_function_video_gen_handler( .as_ref() .map(|s| &s.user_token), maybe_model_type: Some(ModelType::Kling3p0Standard), - maybe_generation_provider: Some(GenerationProvider::Artcraft), + maybe_generation_provider: Some(enums_convert::common::generation::generation_provider::generation_provider_to_api(&GenerationProvider::Artcraft)), + maybe_positive_prompt: request.prompt.as_deref(), maybe_negative_prompt: None, maybe_other_args: None, @@ -363,7 +368,8 @@ pub async fn kling_3p0_standard_multi_function_video_gen_handler( maybe_creator_user_token: maybe_user_session.as_ref().map(|s| &s.user_token), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: Visibility::Public, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&Visibility::Public), + mysql_executor: &mut *transaction, starting_job_status_override: None, maybe_frontend_failure_category: None, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/multi_function/seedance_1p5_pro_multi_function_video_gen_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/multi_function/seedance_1p5_pro_multi_function_video_gen_handler.rs index 790acdebbe..c42ae3e83c 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/multi_function/seedance_1p5_pro_multi_function_video_gen_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/multi_function/seedance_1p5_pro_multi_function_video_gen_handler.rs @@ -310,7 +310,8 @@ pub async fn seedance_1p5_pro_multi_function_video_gen_handler( .as_ref() .map(|s| &s.user_token), maybe_model_type: Some(ModelType::Seedance1p5Pro), - maybe_generation_provider: Some(GenerationProvider::Artcraft), + maybe_generation_provider: Some(enums_convert::common::generation::generation_provider::generation_provider_to_api(&GenerationProvider::Artcraft)), + maybe_positive_prompt: request.prompt.as_deref(), maybe_negative_prompt: None, maybe_other_args: None, @@ -368,7 +369,8 @@ pub async fn seedance_1p5_pro_multi_function_video_gen_handler( maybe_creator_user_token: maybe_user_session.as_ref().map(|s| &s.user_token), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: Visibility::Public, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&Visibility::Public), + mysql_executor: &mut *transaction, starting_job_status_override: None, maybe_frontend_failure_category: None, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/multi_function/seedance_2p0_multi_function_video_gen_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/multi_function/seedance_2p0_multi_function_video_gen_handler.rs index 0b19d2b82e..a2b8a002b9 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/multi_function/seedance_2p0_multi_function_video_gen_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/multi_function/seedance_2p0_multi_function_video_gen_handler.rs @@ -269,7 +269,8 @@ pub async fn seedance_2p0_multi_function_video_gen_handler( prompt_type: PromptType::ArtcraftApp, maybe_creator_user_token: maybe_user_session.as_ref().map(|s| &s.user_token), maybe_model_type: Some(ModelType::Seedance2p0), - maybe_generation_provider: Some(GenerationProvider::Artcraft), + maybe_generation_provider: Some(enums_convert::common::generation::generation_provider::generation_provider_to_api(&GenerationProvider::Artcraft)), + maybe_positive_prompt: request.prompt.as_deref(), maybe_negative_prompt: None, maybe_other_args: None, @@ -314,7 +315,8 @@ pub async fn seedance_2p0_multi_function_video_gen_handler( for media_token in tokens { context_items.push(PromptContextItem { media_token: media_token.clone(), - context_semantic_type: semantic_type, + context_semantic_type: enums_convert::by_table::prompt_context_items::prompt_context_semantic_type::prompt_context_semantic_type_to_api(&semantic_type), + }); } } @@ -364,7 +366,8 @@ pub async fn seedance_2p0_multi_function_video_gen_handler( maybe_creator_user_token: maybe_user_session.as_ref().map(|s| &s.user_token), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: Visibility::Public, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&Visibility::Public), + mysql_executor: &mut *transaction, phantom: Default::default(), } diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/multi_function/sora_2_multi_function_video_gen_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/multi_function/sora_2_multi_function_video_gen_handler.rs index db88b1d2a8..bf39c77c00 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/multi_function/sora_2_multi_function_video_gen_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/multi_function/sora_2_multi_function_video_gen_handler.rs @@ -15,9 +15,13 @@ use actix_web::{web, HttpRequest}; use artcraft_api_defs::generate::video::multi_function::sora_2_multi_function_video_gen::{Sora2MultiFunctionVideoGenAspectRatio, Sora2MultiFunctionVideoGenDuration, Sora2MultiFunctionVideoGenRequest, Sora2MultiFunctionVideoGenResolution, Sora2MultiFunctionVideoGenResponse}; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use enums_db::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType; +use enums_api::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType as ApiPromptContextSemanticType; use enums_db::by_table::prompts::prompt_type::PromptType; +use enums_api::by_table::prompts::prompt_type::PromptType as ApiPromptType; use enums_db::common::generation::generation_provider::GenerationProvider; +use enums_api::common::generation::generation_provider::GenerationProvider as ApiGenerationProvider; use enums_db::common::model_type::ModelType; +use enums_api::common::model_type::ModelType as ApiModelType; use enums_db::common::visibility::Visibility; use fal_client::creds::open_ai_api_key::OpenAiApiKey; use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator; @@ -276,7 +280,8 @@ pub async fn sora_2_multi_function_video_gen_handler( .as_ref() .map(|s| &s.user_token), maybe_model_type: Some(ModelType::Sora2), - maybe_generation_provider: Some(GenerationProvider::Artcraft), + maybe_generation_provider: Some(enums_convert::common::generation::generation_provider::generation_provider_to_api(&GenerationProvider::Artcraft)), + maybe_positive_prompt: request.prompt.as_deref(), maybe_negative_prompt: None, maybe_other_args: None, @@ -334,7 +339,8 @@ pub async fn sora_2_multi_function_video_gen_handler( maybe_creator_user_token: maybe_user_session.as_ref().map(|s| &s.user_token), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: Visibility::Public, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&Visibility::Public), + mysql_executor: &mut *transaction, starting_job_status_override: None, maybe_frontend_failure_category: None, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/multi_function/sora_2_pro_multi_function_video_gen_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/multi_function/sora_2_pro_multi_function_video_gen_handler.rs index b5ae6eb9c2..8fdb892239 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/multi_function/sora_2_pro_multi_function_video_gen_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/multi_function/sora_2_pro_multi_function_video_gen_handler.rs @@ -15,9 +15,13 @@ use actix_web::{web, HttpRequest}; use artcraft_api_defs::generate::video::multi_function::sora_2_pro_multi_function_video_gen::{Sora2ProMultiFunctionVideoGenAspectRatio, Sora2ProMultiFunctionVideoGenDuration, Sora2ProMultiFunctionVideoGenRequest, Sora2ProMultiFunctionVideoGenResolution, Sora2ProMultiFunctionVideoGenResponse}; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use enums_db::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType; +use enums_api::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType as ApiPromptContextSemanticType; use enums_db::by_table::prompts::prompt_type::PromptType; +use enums_api::by_table::prompts::prompt_type::PromptType as ApiPromptType; use enums_db::common::generation::generation_provider::GenerationProvider; +use enums_api::common::generation::generation_provider::GenerationProvider as ApiGenerationProvider; use enums_db::common::model_type::ModelType; +use enums_api::common::model_type::ModelType as ApiModelType; use enums_db::common::visibility::Visibility; use fal_client::creds::open_ai_api_key::OpenAiApiKey; use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator; @@ -278,7 +282,8 @@ pub async fn sora_2_pro_multi_function_video_gen_handler( .as_ref() .map(|s| &s.user_token), maybe_model_type: Some(ModelType::Sora2Pro), - maybe_generation_provider: Some(GenerationProvider::Artcraft), + maybe_generation_provider: Some(enums_convert::common::generation::generation_provider::generation_provider_to_api(&GenerationProvider::Artcraft)), + maybe_positive_prompt: request.prompt.as_deref(), maybe_negative_prompt: None, maybe_other_args: None, @@ -336,7 +341,8 @@ pub async fn sora_2_pro_multi_function_video_gen_handler( maybe_creator_user_token: maybe_user_session.as_ref().map(|s| &s.user_token), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: Visibility::Public, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&Visibility::Public), + mysql_executor: &mut *transaction, starting_job_status_override: None, maybe_frontend_failure_category: None, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/multi_function/veo_3p1_fast_multi_function_video_gen_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/multi_function/veo_3p1_fast_multi_function_video_gen_handler.rs index 681d3182f9..52a0d2c4f5 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/multi_function/veo_3p1_fast_multi_function_video_gen_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/multi_function/veo_3p1_fast_multi_function_video_gen_handler.rs @@ -15,9 +15,13 @@ use actix_web::{web, HttpRequest}; use artcraft_api_defs::generate::video::multi_function::veo_3p1_fast_multi_function_video_gen::{Veo3p1FastMultiFunctionVideoGenAspectRatio, Veo3p1FastMultiFunctionVideoGenDuration, Veo3p1FastMultiFunctionVideoGenRequest, Veo3p1FastMultiFunctionVideoGenResolution, Veo3p1FastMultiFunctionVideoGenResponse}; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use enums_db::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType; +use enums_api::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType as ApiPromptContextSemanticType; use enums_db::by_table::prompts::prompt_type::PromptType; +use enums_api::by_table::prompts::prompt_type::PromptType as ApiPromptType; use enums_db::common::generation::generation_provider::GenerationProvider; +use enums_api::common::generation::generation_provider::GenerationProvider as ApiGenerationProvider; use enums_db::common::model_type::ModelType; +use enums_api::common::model_type::ModelType as ApiModelType; use enums_db::common::visibility::Visibility; use fal_client::creds::open_ai_api_key::OpenAiApiKey; use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator; @@ -341,7 +345,8 @@ pub async fn veo_3p1_fast_multi_function_video_gen_handler( .as_ref() .map(|s| &s.user_token), maybe_model_type: Some(ModelType::Veo3p1Fast), - maybe_generation_provider: Some(GenerationProvider::Artcraft), + maybe_generation_provider: Some(enums_convert::common::generation::generation_provider::generation_provider_to_api(&GenerationProvider::Artcraft)), + maybe_positive_prompt: request.prompt.as_deref(), maybe_negative_prompt: None, maybe_other_args: None, @@ -399,7 +404,8 @@ pub async fn veo_3p1_fast_multi_function_video_gen_handler( maybe_creator_user_token: maybe_user_session.as_ref().map(|s| &s.user_token), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: Visibility::Public, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&Visibility::Public), + mysql_executor: &mut *transaction, starting_job_status_override: None, maybe_frontend_failure_category: None, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/multi_function/veo_3p1_multi_function_video_gen_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/multi_function/veo_3p1_multi_function_video_gen_handler.rs index b59221c1f0..1a4ce34376 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/multi_function/veo_3p1_multi_function_video_gen_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/video/multi_function/veo_3p1_multi_function_video_gen_handler.rs @@ -15,9 +15,13 @@ use actix_web::{web, HttpRequest}; use artcraft_api_defs::generate::video::multi_function::veo_3p1_multi_function_video_gen::{Veo3p1MultiFunctionVideoGenAspectRatio, Veo3p1MultiFunctionVideoGenDuration, Veo3p1MultiFunctionVideoGenRequest, Veo3p1MultiFunctionVideoGenResolution, Veo3p1MultiFunctionVideoGenResponse}; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use enums_db::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType; +use enums_api::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType as ApiPromptContextSemanticType; use enums_db::by_table::prompts::prompt_type::PromptType; +use enums_api::by_table::prompts::prompt_type::PromptType as ApiPromptType; use enums_db::common::generation::generation_provider::GenerationProvider; +use enums_api::common::generation::generation_provider::GenerationProvider as ApiGenerationProvider; use enums_db::common::model_type::ModelType; +use enums_api::common::model_type::ModelType as ApiModelType; use enums_db::common::visibility::Visibility; use fal_client::creds::open_ai_api_key::OpenAiApiKey; use fal_client::requests::traits::fal_request_cost_calculator_trait::FalRequestCostCalculator; @@ -341,7 +345,8 @@ pub async fn veo_3p1_multi_function_video_gen_handler( .as_ref() .map(|s| &s.user_token), maybe_model_type: Some(ModelType::Veo3p1), - maybe_generation_provider: Some(GenerationProvider::Artcraft), + maybe_generation_provider: Some(enums_convert::common::generation::generation_provider::generation_provider_to_api(&GenerationProvider::Artcraft)), + maybe_positive_prompt: request.prompt.as_deref(), maybe_negative_prompt: None, maybe_other_args: None, @@ -399,7 +404,8 @@ pub async fn veo_3p1_multi_function_video_gen_handler( maybe_creator_user_token: maybe_user_session.as_ref().map(|s| &s.user_token), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: Visibility::Public, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&Visibility::Public), + mysql_executor: &mut *transaction, starting_job_status_override: None, maybe_frontend_failure_category: None, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/image_studio/update_gpt_image_job_status_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/image_studio/update_gpt_image_job_status_handler.rs index 3bc97c4bfb..6e4a70d547 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/image_studio/update_gpt_image_job_status_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/image_studio/update_gpt_image_job_status_handler.rs @@ -12,10 +12,15 @@ use base64::Engine; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use cloud_storage::bucket_client::BucketClient; use enums_db::by_table::media_files::media_file_class::MediaFileClass; +use enums_api::by_table::media_files::media_file_class::MediaFileClass as ApiMediaFileClass; use enums_db::by_table::media_files::media_file_origin_category::MediaFileOriginCategory; +use enums_api::by_table::media_files::media_file_origin_category::MediaFileOriginCategory as ApiMediaFileOriginCategory; use enums_db::by_table::media_files::media_file_origin_product_category::MediaFileOriginProductCategory; +use enums_api::by_table::media_files::media_file_origin_product_category::MediaFileOriginProductCategory as ApiMediaFileOriginProductCategory; use enums_db::by_table::media_files::media_file_type::MediaFileType; +use enums_api::by_table::media_files::media_file_type::MediaFileType as ApiMediaFileType; use enums_db::common::job_status_plus::JobStatusPlus; +use enums_api::common::job_status_plus::JobStatusPlus as ApiJobStatusPlus; use errors::AnyhowResult; use hashing::sha256::sha256_hash_bytes::sha256_hash_bytes; use images::image_info::image_info::ImageInfo; @@ -138,6 +143,7 @@ pub async fn update_gpt_image_job_status_handler( match inference_job.status { JobStatusPlus::CompleteSuccess => { + // Job has already been completed. Don't replay the request. return Ok(Json(UpdateGptImageJobStatusSuccessResponse { success: true })) }, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/image_studio/upload/upload_snapshot_media_file_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/image_studio/upload/upload_snapshot_media_file_handler.rs index d50f7f5cc9..b69483ba98 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/image_studio/upload/upload_snapshot_media_file_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/image_studio/upload/upload_snapshot_media_file_handler.rs @@ -14,7 +14,9 @@ use utoipa::ToSchema; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use enums_db::by_table::media_files::media_file_class::MediaFileClass; +use enums_api::by_table::media_files::media_file_class::MediaFileClass as ApiMediaFileClass; use enums_db::by_table::media_files::media_file_type::MediaFileType; +use enums_api::by_table::media_files::media_file_type::MediaFileType as ApiMediaFileType; use enums_db::common::visibility::Visibility; use hashing::sha256::sha256_hash_bytes::sha256_hash_bytes; use http_server_common::request::get_request_ip::get_request_ip; @@ -237,7 +239,8 @@ pub async fn upload_snapshot_media_file_handler( })?; let (token, record_id) = insert_media_file_from_file_upload(InsertMediaFileFromUploadArgs { - maybe_media_class: Some(MediaFileClass::Image), + maybe_media_class: Some(enums_convert::by_table::media_files::media_file_class::media_file_class_to_api(&MediaFileClass::Image)), + media_file_type: MediaFileType::Image, maybe_creator_user_token: maybe_user_token.as_ref(), maybe_creator_anonymous_visitor_token: maybe_avt_token.as_ref(), diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/inference_job/get/batch_get_inference_job_status_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/inference_job/get/batch_get_inference_job_status_handler.rs index 04d2189d45..0d5efa9dad 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/inference_job/get/batch_get_inference_job_status_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/inference_job/get/batch_get_inference_job_status_handler.rs @@ -24,8 +24,11 @@ use bucket_paths::legacy::typified_paths::public::voice_conversion_results::buck use chrono::{DateTime, Utc}; use enums_db::by_table::generic_inference_jobs::frontend_failure_category::FrontendFailureCategory; use enums_db::by_table::generic_inference_jobs::inference_category::InferenceCategory; +use enums_api::by_table::generic_inference_jobs::inference_category::InferenceCategory as ApiInferenceCategory; use enums_db::common::job_status_plus::JobStatusPlus; +use enums_api::common::job_status_plus::JobStatusPlus as ApiJobStatusPlus; use enums_db::no_table::style_transfer::style_transfer_name::StyleTransferName; +use enums_api::no_table::style_transfer::style_transfer_name::StyleTransferName as ApiStyleTransferName; use log::error; use mysql_queries::queries::generic_inference::web::batch_get_inference_job_status::batch_get_inference_job_status; use mysql_queries::queries::generic_inference::web::job_status::GenericInferenceJobStatus; @@ -75,7 +78,7 @@ pub struct BatchInferenceJobStatusResponsePayload { /// Details about what the user requested for generation #[derive(Serialize, ToSchema)] pub struct BatchRequestDetailsResponse { - pub inference_category: InferenceCategory, + pub inference_category: ApiInferenceCategory, pub maybe_model_type: Option, pub maybe_model_token: Option, @@ -87,7 +90,7 @@ pub struct BatchRequestDetailsResponse { /// OPTIONAL. For Comfy / Video Style Transfer jobs, this might include /// the name of the selected style. - pub maybe_style_name: Option, + pub maybe_style_name: Option, /// OPTIONAL. For Live Portrait jobs, this is additional information on the request. pub maybe_live_portrait_details: Option, @@ -101,7 +104,7 @@ pub struct BatchRequestDetailsResponse { #[derive(Serialize, ToSchema)] pub struct BatchStatusDetailsResponse { /// Primary status from the database (a state machine). - pub status: JobStatusPlus, + pub status: ApiJobStatusPlus, /// Extra, temporary status from Redis. /// This can denote inference progress, and the Python code can write to it. @@ -290,12 +293,14 @@ fn db_record_to_response_payload( BatchInferenceJobStatusResponsePayload { job_token: record.job_token, request: BatchRequestDetailsResponse { - inference_category: record.request_details.inference_category, + inference_category: enums_convert::by_table::generic_inference_jobs::inference_category::inference_category_to_api(&record.request_details.inference_category), + maybe_model_type: maybe_filter_model_name(record.request_details.maybe_model_type.as_deref()), maybe_model_token: record.request_details.maybe_model_token, maybe_model_title: record.request_details.maybe_model_title, maybe_raw_inference_text: record.request_details.maybe_raw_inference_text, - maybe_style_name: record.request_details.maybe_style_name, + maybe_style_name: enums_convert::no_table::style_transfer::style_transfer_name::style_transfer_name_to_api(&record.request_details.maybe_style_name), + maybe_live_portrait_details: maybe_polymorphic_args .as_ref() .and_then(|args| extract_live_portrait_details(args)), @@ -304,7 +309,8 @@ fn db_record_to_response_payload( .and_then(|args| extract_lipsync_details(args)), }, status: BatchStatusDetailsResponse { - status: record.status, + status: enums_convert::common::job_status_plus::job_status_plus_to_api(&record.status), + maybe_extra_status_description, maybe_assigned_worker: maybe_filter_model_name(record.maybe_assigned_worker.as_deref()), maybe_assigned_cluster: record.maybe_assigned_cluster, @@ -319,7 +325,9 @@ fn db_record_to_response_payload( let public_bucket_media_path = match inference_category { // NB: TTS has to be special cased due to legacy behavior InferenceCategory::TextToSpeech | + InferenceCategory::F5TTS => { + match result_details.entity_type.as_str() { "media_file" => { // NB: We're migrating TTS to media_files. @@ -360,11 +368,14 @@ fn db_record_to_response_payload( } // Unsupported media files. InferenceCategory::FormatConversion | + InferenceCategory::ConvertBvhToWorkflow => { + "".to_string() } // Deprecated InferenceCategory::DeprecatedField => { + "".to_string() // TODO(bt,2024-07-16): Read job type instead } // The blessed path that modern media files use. diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/inference_job/get/get_inference_job_status_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/inference_job/get/get_inference_job_status_handler.rs index 2fdf52fe54..d92e1ae0fb 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/inference_job/get/get_inference_job_status_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/inference_job/get/get_inference_job_status_handler.rs @@ -22,8 +22,11 @@ use bucket_paths::legacy::typified_paths::public::voice_conversion_results::buck use chrono::{DateTime, Utc}; use enums_db::by_table::generic_inference_jobs::frontend_failure_category::FrontendFailureCategory; use enums_db::by_table::generic_inference_jobs::inference_category::InferenceCategory; +use enums_api::by_table::generic_inference_jobs::inference_category::InferenceCategory as ApiInferenceCategory; use enums_db::common::job_status_plus::JobStatusPlus; +use enums_api::common::job_status_plus::JobStatusPlus as ApiJobStatusPlus; use enums_db::no_table::style_transfer::style_transfer_name::StyleTransferName; +use enums_api::no_table::style_transfer::style_transfer_name::StyleTransferName as ApiStyleTransferName; use log::error; use mysql_queries::queries::generic_inference::web::get_inference_job_status::get_inference_job_status; use mysql_queries::queries::generic_inference::web::job_status::GenericInferenceJobStatus; @@ -66,7 +69,7 @@ pub struct InferenceJobStatusResponsePayload { /// Details about what the user requested for generation #[derive(Serialize, ToSchema)] pub struct RequestDetailsResponse { - pub inference_category: InferenceCategory, + pub inference_category: ApiInferenceCategory, pub maybe_model_type: Option, pub maybe_model_token: Option, @@ -78,7 +81,7 @@ pub struct RequestDetailsResponse { /// OPTIONAL. For Comfy / Video Style Transfer jobs, this might include /// the name of the selected style. - pub maybe_style_name: Option, + pub maybe_style_name: Option, /// OPTIONAL. For Live Portrait jobs, this is additional information on the request. pub maybe_live_portrait_details: Option, @@ -92,7 +95,7 @@ pub struct RequestDetailsResponse { #[derive(Serialize, ToSchema)] pub struct StatusDetailsResponse { /// Primary status from the database (a state machine). - pub status: JobStatusPlus, + pub status: ApiJobStatusPlus, /// Extra, temporary status from Redis. /// This can denote inference progress, and the Python code can write to it. @@ -280,12 +283,14 @@ fn record_to_payload( InferenceJobStatusResponsePayload { job_token: record.job_token, request: RequestDetailsResponse { - inference_category: record.request_details.inference_category, + inference_category: enums_convert::by_table::generic_inference_jobs::inference_category::inference_category_to_api(&record.request_details.inference_category), + maybe_model_type: maybe_filter_model_name(record.request_details.maybe_model_type.as_deref()), maybe_model_token: record.request_details.maybe_model_token, maybe_model_title: record.request_details.maybe_model_title, maybe_raw_inference_text: record.request_details.maybe_raw_inference_text, - maybe_style_name: record.request_details.maybe_style_name, + maybe_style_name: enums_convert::no_table::style_transfer::style_transfer_name::style_transfer_name_to_api(&record.request_details.maybe_style_name), + maybe_live_portrait_details: maybe_polymorphic_args .as_ref() .and_then(|args| extract_live_portrait_details(args)), @@ -294,7 +299,8 @@ fn record_to_payload( .and_then(|args| extract_lipsync_details(args)), }, status: StatusDetailsResponse { - status: record.status, + status: enums_convert::common::job_status_plus::job_status_plus_to_api(&record.status), + maybe_extra_status_description, maybe_assigned_worker: maybe_filter_model_name(record.maybe_assigned_worker.as_deref()), maybe_assigned_cluster: record.maybe_assigned_cluster, @@ -309,6 +315,7 @@ fn record_to_payload( let public_bucket_media_path = match inference_category { // NB: TTS has to be special cased due to legacy behavior InferenceCategory::TextToSpeech + | InferenceCategory::F5TTS => { match result_details.entity_type.as_str() { "media_file" => { @@ -350,11 +357,14 @@ fn record_to_payload( } // Unsupported media files. InferenceCategory::FormatConversion | + InferenceCategory::ConvertBvhToWorkflow => { + "".to_string() } // Deprecated InferenceCategory::DeprecatedField => { + "".to_string() // TODO(bt,2024-07-16): Read job type instead } // The blessed path that modern media files use. @@ -390,6 +400,7 @@ mod tests { use crate::http_server::common_responses::media::media_domain::MediaDomain; use crate::http_server::endpoints::inference_job::get::get_inference_job_status_handler::record_to_payload; use enums_db::by_table::generic_inference_jobs::inference_category::InferenceCategory; +use enums_api::by_table::generic_inference_jobs::inference_category::InferenceCategory as ApiInferenceCategory; use mysql_queries::queries::generic_inference::web::job_status::{GenericInferenceJobStatus, RequestDetails, ResultDetails}; use server_environment::ServerEnvironment; use url::Url; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/inference_job/list/list_session_jobs_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/inference_job/list/list_session_jobs_handler.rs index 01a61d4bf0..6fcfc8f074 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/inference_job/list/list_session_jobs_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/inference_job/list/list_session_jobs_handler.rs @@ -24,7 +24,9 @@ use chrono::{DateTime, Utc}; use enums_api::api_safe::by_table::generic_inference_jobs::frontend_failure_category_for_api_clients::FrontendFailureCategoryForApiClients; use enums_api::api_safe::by_table::generic_inference_jobs::frontend_failure_category_for_old_clients::FrontendFailureCategoryForOldClients; use enums_db::by_table::generic_inference_jobs::inference_category::InferenceCategory; +use enums_api::by_table::generic_inference_jobs::inference_category::InferenceCategory as ApiInferenceCategory; use enums_db::common::job_status_plus::JobStatusPlus; +use enums_api::common::job_status_plus::JobStatusPlus as ApiJobStatusPlus; use log::{error, warn}; use mysql_queries::queries::generic_inference::web::job_status::GenericInferenceJobStatus; use mysql_queries::queries::generic_inference::web::list_session_jobs::{list_session_jobs_from_connection, ListSessionJobsForUserArgs, SessionUser}; @@ -152,8 +154,10 @@ pub async fn list_session_jobs_handler( let args = ListSessionJobsForUserArgs { user, - maybe_include_job_statuses: include_states.as_ref(), - maybe_exclude_job_statuses: exclude_states.as_ref(), + maybe_include_job_statuses: enums_convert::common::job_status_plus::job_status_plus_to_api(&include_states.as_ref()), + + maybe_exclude_job_statuses: enums_convert::common::job_status_plus::job_status_plus_to_api(&exclude_states.as_ref()), + }; // NB: Since this is publicly exposed, we don't query sensitive data. @@ -222,6 +226,7 @@ fn records_to_response( match record.request.inference_category { // Show all audio results InferenceCategory::TextToSpeech + | InferenceCategory::VoiceConversion | InferenceCategory::SeedVc | InferenceCategory::F5TTS => return true, @@ -258,6 +263,7 @@ fn db_record_to_response_payload( /// If the job's updated_at timestamp is updated elsewhere, then this is not accurate at all. let maybe_current_execution_duration_seconds = match record.status { JobStatusPlus::Started => { + let now = Utc::now(); let duration = now.signed_duration_since(record.updated_at); Some(i64_to_u64_zero_clamped(duration.num_seconds())) @@ -268,12 +274,14 @@ fn db_record_to_response_payload( ListSessionJobsItem { job_token: record.job_token, request: ListSessionRequestDetailsResponse { - inference_category: record.request_details.inference_category, + inference_category: enums_convert::by_table::generic_inference_jobs::inference_category::inference_category_to_api(&record.request_details.inference_category), + maybe_model_type: maybe_filter_model_name(record.request_details.maybe_model_type.as_deref()), maybe_model_token: record.request_details.maybe_model_token, maybe_model_title: record.request_details.maybe_model_title, maybe_raw_inference_text: record.request_details.maybe_raw_inference_text, - maybe_style_name: record.request_details.maybe_style_name, + maybe_style_name: enums_convert::no_table::style_transfer::style_transfer_name::style_transfer_name_to_api(&record.request_details.maybe_style_name), + maybe_live_portrait_details: maybe_polymorphic_args .as_ref() .and_then(|args| extract_live_portrait_details(args)), @@ -282,7 +290,8 @@ fn db_record_to_response_payload( .and_then(|args| extract_lipsync_details(args)), }, status: ListSessionStatusDetailsResponse { - status: record.status, + status: enums_convert::common::job_status_plus::job_status_plus_to_api(&record.status), + maybe_extra_status_description, maybe_assigned_worker: maybe_filter_model_name(record.maybe_assigned_worker.as_deref()), maybe_assigned_cluster: record.maybe_assigned_cluster, @@ -304,7 +313,9 @@ fn db_record_to_response_payload( let public_bucket_media_path = match inference_category { // NB: Be careful here, because this varies based on the type of inference result. InferenceCategory::TextToSpeech | + InferenceCategory::F5TTS => { + match result_details.entity_type.as_str() { "media_file" => { // NB: We're migrating TTS to media_files. @@ -345,11 +356,14 @@ fn db_record_to_response_payload( } // Unsupported media files. InferenceCategory::FormatConversion | + InferenceCategory::ConvertBvhToWorkflow => { + "".to_string() } // Deprecated InferenceCategory::DeprecatedField => { + "".to_string() // TODO(bt,2024-07-16): Read job type instead } // The blessed path that modern media files use. diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/edit/change_media_file_animation_type_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/edit/change_media_file_animation_type_handler.rs index 782ea06cea..41b57b4ec4 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/edit/change_media_file_animation_type_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/edit/change_media_file_animation_type_handler.rs @@ -9,7 +9,9 @@ use log::warn; use utoipa::ToSchema; use enums_db::by_table::media_files::media_file_animation_type::MediaFileAnimationType; +use enums_api::by_table::media_files::media_file_animation_type::MediaFileAnimationType as ApiMediaFileAnimationType; use enums_db::by_table::media_files::media_file_engine_category::MediaFileEngineCategory; +use enums_api::by_table::media_files::media_file_engine_category::MediaFileEngineCategory as ApiMediaFileEngineCategory; use http_server_common::response::serialize_as_json_error::serialize_as_json_error; use mysql_queries::queries::media_files::edit::update_media_file_animation_type::update_media_file_animation_type; use mysql_queries::queries::media_files::get::get_media_file::get_media_file; @@ -23,7 +25,7 @@ use crate::state::server_state::ServerState; pub struct ChangeMediaFileAnimationTypeRequest { /// The new animation type for the media file. /// It can be cleared to null, but only for characters. - pub maybe_animation_type: Option, + pub maybe_animation_type: Option, } // =============== Error Response =============== diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/edit/change_media_file_engine_category_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/edit/change_media_file_engine_category_handler.rs index 25ae3f3f34..1cb117f2a8 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/edit/change_media_file_engine_category_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/edit/change_media_file_engine_category_handler.rs @@ -9,6 +9,7 @@ use log::warn; use utoipa::ToSchema; use enums_db::by_table::media_files::media_file_engine_category::MediaFileEngineCategory; +use enums_api::by_table::media_files::media_file_engine_category::MediaFileEngineCategory as ApiMediaFileEngineCategory; use http_server_common::response::serialize_as_json_error::serialize_as_json_error; use mysql_queries::queries::media_files::edit::update_media_file_engine_category::update_media_file_engine_category; use mysql_queries::queries::media_files::get::get_media_file::get_media_file; @@ -20,7 +21,7 @@ use crate::state::server_state::ServerState; #[derive(Deserialize, ToSchema)] pub struct ChangeMediaFileEngineCategoryRequest { - pub engine_category: MediaFileEngineCategory, + pub engine_category: ApiMediaFileEngineCategory, } // =============== Error Response =============== diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/edit/change_media_file_visibility_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/edit/change_media_file_visibility_handler.rs index 83a65d71ef..81ec3c42a7 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/edit/change_media_file_visibility_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/edit/change_media_file_visibility_handler.rs @@ -142,7 +142,8 @@ pub async fn change_media_file_visibility_handler( let query_result = update_media_file_visibility( UpdateMediaFileArgs { media_file_token: &media_file_token.clone(), - creator_set_visibility: &creator_set_visibility, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&&creator_set_visibility), + maybe_mod_user_token: maybe_mod_user_token.as_deref(), mysql_pool: &server_state.mysql_pool } diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/edit/set_media_file_cover_image_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/edit/set_media_file_cover_image_handler.rs index 08a4452864..5322235bf6 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/edit/set_media_file_cover_image_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/edit/set_media_file_cover_image_handler.rs @@ -9,6 +9,7 @@ use log::{info, warn}; use utoipa::ToSchema; use enums_db::by_table::media_files::media_file_type::MediaFileType; +use enums_api::by_table::media_files::media_file_type::MediaFileType as ApiMediaFileType; use http_server_common::response::serialize_as_json_error::serialize_as_json_error; use mysql_queries::queries::media_files::edit::set_media_file_cover_image::{set_media_file_cover_image, UpdateArgs}; use mysql_queries::queries::media_files::get::get_media_file::get_media_file; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/get/batch_get_media_files_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/get/batch_get_media_files_handler.rs index fea8d7789e..79c50259d4 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/get/batch_get_media_files_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/get/batch_get_media_files_handler.rs @@ -11,14 +11,22 @@ use artcraft_api_defs::common::responses::media_links::MediaLinks; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use chrono::{DateTime, Utc}; use enums_db::by_table::media_files::media_file_animation_type::MediaFileAnimationType; +use enums_api::by_table::media_files::media_file_animation_type::MediaFileAnimationType as ApiMediaFileAnimationType; use enums_db::by_table::media_files::media_file_class::MediaFileClass; +use enums_api::by_table::media_files::media_file_class::MediaFileClass as ApiMediaFileClass; use enums_db::by_table::media_files::media_file_engine_category::MediaFileEngineCategory; +use enums_api::by_table::media_files::media_file_engine_category::MediaFileEngineCategory as ApiMediaFileEngineCategory; use enums_db::by_table::media_files::media_file_subtype::MediaFileSubtype; +use enums_api::by_table::media_files::media_file_subtype::MediaFileSubtype as ApiMediaFileSubtype; use enums_db::by_table::media_files::media_file_type::MediaFileType; +use enums_api::by_table::media_files::media_file_type::MediaFileType as ApiMediaFileType; use enums_db::by_table::model_weights::weights_category::WeightsCategory; +use enums_api::by_table::model_weights::weights_category::WeightsCategory as ApiWeightsCategory; use enums_db::by_table::model_weights::weights_types::WeightsType; +use enums_api::by_table::model_weights::weights_types::WeightsType as ApiWeightsType; use enums_db::common::visibility::Visibility; use enums_db::no_table::style_transfer::style_transfer_name::StyleTransferName; +use enums_api::no_table::style_transfer::style_transfer_name::StyleTransferName as ApiStyleTransferName; use enums_public::by_table::model_weights::public_weights_types::PublicWeightsType; use log::warn; use mysql_queries::queries::media_files::get::batch_get_media_files::batch_get_media_files; @@ -66,27 +74,27 @@ pub struct BatchMediaFileInfo { pub token: MediaFileToken, /// The coarse-grained class of media file: image, video, etc. - pub media_class: MediaFileClass, + pub media_class: ApiMediaFileClass, /// Type of media will dictate which fields are populated and what /// the frontend should display (eg. video player vs audio player). /// This is closer in meaning to a "mime type". - pub media_type: MediaFileType, + pub media_type: ApiMediaFileType, /// If this is an engine/3D asset, this is the broad category (scene, /// animation, etc.) of that object. /// This can also be used for filtering in list/batch endpoints. - pub maybe_engine_category: Option, + pub maybe_engine_category: Option, /// If this is an engine/3D asset for an animation or a rig that can /// be animated with either (or both) skeletal or blend shape animations, /// this describes the animation regime used or supported. - pub maybe_animation_type: Option, + pub maybe_animation_type: Option, /// If the media file has a subtype, we'll report it. /// This is mostly used for Bevy engine files. #[deprecated(note="This was for the Bevy engine. Do not use.")] - pub maybe_media_subtype: Option, + pub maybe_media_subtype: Option, /// Extension for the engine to load over remote:// URLs. #[deprecated(note="This was for the Bevy engine. Do not use.")] @@ -146,7 +154,7 @@ pub struct BatchMediaFileInfo { /// For Comfy / Video Style Transfer jobs, this might include /// the name of the selected style. - pub maybe_style_name: Option, + pub maybe_style_name: Option, /// The foreign key to the prompt used to generate the media, if applicable. pub maybe_prompt_token: Option, @@ -186,7 +194,7 @@ pub struct BatchMediaFileInfo { pub struct BatchGetMediaFilesModelInfo { pub weight_token: ModelWeightToken, pub weight_type: PublicWeightsType, - pub weight_category: WeightsCategory, + pub weight_category: ApiWeightsCategory, pub title: String, /// Cover images are small descriptive images that can be set for any model. @@ -318,19 +326,28 @@ pub async fn batch_get_media_files_handler( // NB: Some engine pages will need to know the engine extension to load the file. let maybe_engine_extension = match result.media_type { MediaFileType::Bvh => Some(".bvh".to_string()), + MediaFileType::Glb => Some(".glb".to_string()), + MediaFileType::Gltf => Some(".gltf".to_string()), + MediaFileType::SceneRon => Some(".scn.ron".to_string()), + _ => None, }; BatchMediaFileInfo { token: result.token.clone(), - media_class: result.media_class, - media_type: result.media_type, - maybe_engine_category: result.maybe_engine_category, - maybe_animation_type: result.maybe_animation_type, - maybe_media_subtype: result.maybe_media_subtype, + media_class: enums_convert::by_table::media_files::media_file_class::media_file_class_to_api(&result.media_class), + + media_type: enums_convert::by_table::media_files::media_file_type::media_file_type_to_api(&result.media_type), + + maybe_engine_category: enums_convert::by_table::media_files::media_file_engine_category::media_file_engine_category_to_api(&result.maybe_engine_category), + + maybe_animation_type: enums_convert::by_table::media_files::media_file_animation_type::media_file_animation_type_to_api(&result.maybe_animation_type), + + maybe_media_subtype: enums_convert::by_table::media_files::media_file_subtype::media_file_subtype_to_api(&result.maybe_media_subtype), + maybe_engine_extension, maybe_batch_token: result.maybe_batch_token, media_links: MediaLinksBuilder::from_media_path_and_env( @@ -356,7 +373,8 @@ pub async fn batch_get_media_files_handler( .as_ref() .map(|info| MediaFileLivePortraitDetails::maybe_from_extra_info(&info)) .flatten(), - maybe_style_name: result.maybe_prompt_args + maybe_style_name: enums_convert::no_table::style_transfer::style_transfer_name::style_transfer_name_to_api(&result.maybe_prompt_args) + .as_ref() .and_then(|args| args.style_name.as_ref()) .and_then(|style| style.to_style_name()), @@ -366,8 +384,10 @@ pub async fn batch_get_media_files_handler( weight_token, // TODO(bt,2023-12-28): Instead of giving bogus defaults on None, make these optional or return // None for *everything* on any field being absent. - weight_type: PublicWeightsType::from_enum(result.maybe_model_weights_type.unwrap_or(WeightsType::Tacotron2)), - weight_category: result.maybe_model_weights_category.unwrap_or(WeightsCategory::TextToSpeech), + weight_type: enums_convert::by_table::model_weights::weights_types::weights_type_to_api(&PublicWeightsType::from_enum(result.maybe_model_weights_type.unwrap_or(WeightsType::Tacotron2))), + + weight_category: enums_convert::by_table::model_weights::weights_category::weights_category_to_api(&result.maybe_model_weights_category.unwrap_or(WeightsCategory::TextToSpeech)), + title: result.maybe_model_weights_title.unwrap_or_else(|| "model".to_string()), maybe_cover_image_public_bucket_path, maybe_weight_creator: UserDetailsLight::from_optional_db_fields_owned( @@ -384,7 +404,8 @@ pub async fn batch_get_media_files_handler( result.maybe_creator_display_name, result.maybe_creator_gravatar_hash, ), - creator_set_visibility: result.creator_set_visibility, + creator_set_visibility: enums_convert::common::visibility::visibility_to_api(&result.creator_set_visibility), + is_user_upload: result.is_user_upload, is_intermediate_system_file: result.is_intermediate_system_file, maybe_prompt_token: result.maybe_prompt_token, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/get/get_media_file_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/get/get_media_file_handler.rs index 3d8037e732..95cdfa94f2 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/get/get_media_file_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/get/get_media_file_handler.rs @@ -20,14 +20,22 @@ use artcraft_api_defs::common::responses::media_links::MediaLinks; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use chrono::{DateTime, Utc}; use enums_db::by_table::media_files::media_file_animation_type::MediaFileAnimationType; +use enums_api::by_table::media_files::media_file_animation_type::MediaFileAnimationType as ApiMediaFileAnimationType; use enums_db::by_table::media_files::media_file_class::MediaFileClass; +use enums_api::by_table::media_files::media_file_class::MediaFileClass as ApiMediaFileClass; use enums_db::by_table::media_files::media_file_engine_category::MediaFileEngineCategory; +use enums_api::by_table::media_files::media_file_engine_category::MediaFileEngineCategory as ApiMediaFileEngineCategory; use enums_db::by_table::media_files::media_file_subtype::MediaFileSubtype; +use enums_api::by_table::media_files::media_file_subtype::MediaFileSubtype as ApiMediaFileSubtype; use enums_db::by_table::media_files::media_file_type::MediaFileType; +use enums_api::by_table::media_files::media_file_type::MediaFileType as ApiMediaFileType; use enums_db::by_table::model_weights::weights_category::WeightsCategory; +use enums_api::by_table::model_weights::weights_category::WeightsCategory as ApiWeightsCategory; use enums_db::by_table::model_weights::weights_types::WeightsType; +use enums_api::by_table::model_weights::weights_types::WeightsType as ApiWeightsType; use enums_db::common::visibility::Visibility; use enums_db::no_table::style_transfer::style_transfer_name::StyleTransferName; +use enums_api::no_table::style_transfer::style_transfer_name::StyleTransferName as ApiStyleTransferName; use enums_public::by_table::model_weights::public_weights_types::PublicWeightsType; use log::warn; use mysql_queries::queries::media_files::get::get_media_file::get_media_file; @@ -56,27 +64,27 @@ pub struct MediaFileInfo { pub token: MediaFileToken, /// The coarse-grained class of media file: image, video, etc. - pub media_class: MediaFileClass, + pub media_class: ApiMediaFileClass, /// Type of media will dictate which fields are populated and what /// the frontend should display (eg. video player vs audio player). /// This is closer in meaning to a "mime type". - pub media_type: MediaFileType, + pub media_type: ApiMediaFileType, /// If this is an engine/3D asset, this is the broad category (scene, /// animation, etc.) of that object. /// This can also be used for filtering in list/batch endpoints. - pub maybe_engine_category: Option, + pub maybe_engine_category: Option, /// If this is an engine/3D asset for an animation or a rig that can /// be animated with either (or both) skeletal or blend shape animations, /// this describes the animation regime used or supported. - pub maybe_animation_type: Option, + pub maybe_animation_type: Option, /// If the media file has a subtype, we'll report it. /// This is mostly used for Bevy engine files. #[deprecated(note="This was for the Bevy engine. Do not use.")] - pub maybe_media_subtype: Option, + pub maybe_media_subtype: Option, /// Extension for the engine to load over remote:// URLs. #[deprecated(note="This was for the Bevy engine. Do not use.")] @@ -140,7 +148,7 @@ pub struct MediaFileInfo { /// For Comfy / Video Style Transfer jobs, this might include /// the name of the selected style. - pub maybe_style_name: Option, + pub maybe_style_name: Option, /// For Comfy / Video Style Transfer jobs, this indicates use of face detailer. pub used_face_detailer: bool, @@ -191,7 +199,7 @@ pub struct GetMediaFileModeratorFields { pub struct GetMediaFileModelInfo { pub weight_token: ModelWeightToken, pub weight_type: PublicWeightsType, - pub weight_category: WeightsCategory, + pub weight_category: ApiWeightsCategory, pub title: String, /// Cover images are small descriptive images that can be set for any model. @@ -346,9 +354,13 @@ async fn modern_media_file_lookup( // NB: Some engine pages will need to know the engine extension to load the file. let maybe_engine_extension = match result.media_type { MediaFileType::Bvh => Some(".bvh".to_string()), + MediaFileType::Glb => Some(".glb".to_string()), + MediaFileType::Gltf => Some(".gltf".to_string()), + MediaFileType::SceneRon => Some(".scn.ron".to_string()), + _ => None, }; @@ -356,10 +368,14 @@ async fn modern_media_file_lookup( success: true, media_file: MediaFileInfo { token: result.token.clone(), - media_class: result.media_class, - media_type: result.media_type, - maybe_engine_category: result.maybe_engine_category, - maybe_animation_type: result.maybe_animation_type, + media_class: enums_convert::by_table::media_files::media_file_class::media_file_class_to_api(&result.media_class), + + media_type: enums_convert::by_table::media_files::media_file_type::media_file_type_to_api(&result.media_type), + + maybe_engine_category: enums_convert::by_table::media_files::media_file_engine_category::media_file_engine_category_to_api(&result.maybe_engine_category), + + maybe_animation_type: enums_convert::by_table::media_files::media_file_animation_type::media_file_animation_type_to_api(&result.maybe_animation_type), + // maybe_media_subtype: result.maybe_media_subtype, maybe_media_subtype: None, // NB(bt,2024-07-25): Stop populating field for consumers. maybe_engine_extension, @@ -388,7 +404,8 @@ async fn modern_media_file_lookup( .as_ref() .map(|info| MediaFileLivePortraitDetails::maybe_from_extra_info(&info)) .flatten(), - maybe_style_name: result.maybe_prompt_args + maybe_style_name: enums_convert::no_table::style_transfer::style_transfer_name::style_transfer_name_to_api(&result.maybe_prompt_args) + .as_ref() .and_then(|args| args.style_name.as_ref()) .and_then(|style| style.to_style_name()), @@ -406,8 +423,10 @@ async fn modern_media_file_lookup( weight_token, // TODO(bt,2023-12-28): Instead of giving bogus defaults on None, make these optional or return // None for *everything* on any field being absent. - weight_type: PublicWeightsType::from_enum(result.maybe_model_weights_type.unwrap_or(WeightsType::Tacotron2)), - weight_category: result.maybe_model_weights_category.unwrap_or(WeightsCategory::TextToSpeech), + weight_type: enums_convert::by_table::model_weights::weights_types::weights_type_to_api(&PublicWeightsType::from_enum(result.maybe_model_weights_type.unwrap_or(WeightsType::Tacotron2))), + + weight_category: enums_convert::by_table::model_weights::weights_category::weights_category_to_api(&result.maybe_model_weights_category.unwrap_or(WeightsCategory::TextToSpeech)), + title: result.maybe_model_weights_title.unwrap_or_else(|| "model".to_string()), maybe_cover_image_public_bucket_path, maybe_weight_creator: UserDetailsLight::from_optional_db_fields_owned( @@ -424,7 +443,8 @@ async fn modern_media_file_lookup( result.maybe_creator_display_name, result.maybe_creator_gravatar_hash, ), - creator_set_visibility: result.creator_set_visibility, + creator_set_visibility: enums_convert::common::visibility::visibility_to_api(&result.creator_set_visibility), + is_user_upload: result.is_user_upload, is_intermediate_system_file: result.is_intermediate_system_file, maybe_prompt_token: result.maybe_prompt_token, @@ -531,7 +551,8 @@ async fn emulate_media_file_with_legacy_tts_result_lookup( maybe_style_name: None, used_face_detailer: false, used_upscaler: false, - creator_set_visibility: result.creator_set_visibility, + creator_set_visibility: enums_convert::common::visibility::visibility_to_api(&result.creator_set_visibility), + is_user_upload: false, is_intermediate_system_file: false, maybe_title: None, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/list/list_batch_generated_redux_media_files_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/list/list_batch_generated_redux_media_files_handler.rs index a896f671ac..782b2e8d4f 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/list/list_batch_generated_redux_media_files_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/list/list_batch_generated_redux_media_files_handler.rs @@ -99,8 +99,10 @@ pub async fn list_batch_generated_redux_media_files_handler( BatchGeneratedReduxMediaFileInfo { token: result.token.clone(), - media_class: result.media_class, - media_type: result.media_type, + media_class: enums_convert::by_table::media_files::media_file_class::media_file_class_to_api(&result.media_class), + + media_type: enums_convert::by_table::media_files::media_file_type::media_file_type_to_api(&result.media_type), + maybe_batch_token: result.maybe_batch_token, media_links: MediaLinksBuilder::from_media_path_and_env( media_domain, @@ -122,7 +124,8 @@ pub async fn list_batch_generated_redux_media_files_handler( result.maybe_creator_display_name, result.maybe_creator_gravatar_hash, ), - creator_set_visibility: result.creator_set_visibility, + creator_set_visibility: enums_convert::common::visibility::visibility_to_api(&result.creator_set_visibility), + maybe_prompt_token: result.maybe_prompt_token, maybe_original_filename: result.maybe_origin_filename, maybe_duration_millis: result.maybe_duration_millis, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/list/list_featured_media_files_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/list/list_featured_media_files_handler.rs index 115326a852..a06da3c6f6 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/list/list_featured_media_files_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/list/list_featured_media_files_handler.rs @@ -7,13 +7,21 @@ use artcraft_api_defs::common::responses::media_links::MediaLinks; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use chrono::{DateTime, Utc}; use enums_db::by_table::media_files::media_file_animation_type::MediaFileAnimationType; +use enums_api::by_table::media_files::media_file_animation_type::MediaFileAnimationType as ApiMediaFileAnimationType; use enums_db::by_table::media_files::media_file_class::MediaFileClass; +use enums_api::by_table::media_files::media_file_class::MediaFileClass as ApiMediaFileClass; use enums_db::by_table::media_files::media_file_engine_category::MediaFileEngineCategory; +use enums_api::by_table::media_files::media_file_engine_category::MediaFileEngineCategory as ApiMediaFileEngineCategory; use enums_db::by_table::media_files::media_file_origin_category::MediaFileOriginCategory; +use enums_api::by_table::media_files::media_file_origin_category::MediaFileOriginCategory as ApiMediaFileOriginCategory; use enums_db::by_table::media_files::media_file_origin_product_category::MediaFileOriginProductCategory; +use enums_api::by_table::media_files::media_file_origin_product_category::MediaFileOriginProductCategory as ApiMediaFileOriginProductCategory; use enums_db::by_table::media_files::media_file_type::MediaFileType; +use enums_api::by_table::media_files::media_file_type::MediaFileType as ApiMediaFileType; use enums_db::common::view_as::ViewAs; +use enums_api::common::view_as::ViewAs as ApiViewAs; use enums_db::no_table::style_transfer::style_transfer_name::StyleTransferName; +use enums_api::no_table::style_transfer::style_transfer_name::StyleTransferName as ApiStyleTransferName; use enums_public::by_table::media_files::public_media_file_model_type::PublicMediaFileModelType; use log::{error, warn}; use mysql_queries::queries::media_files::list::list_featured_media_files::{list_featured_media_files, FeaturedMediaFileListPage, ListFeaturedMediaFilesArgs}; @@ -103,22 +111,22 @@ pub struct FeaturedMediaFile { pub token: MediaFileToken, /// The coarse-grained class of media file: image, video, etc. - pub media_class: MediaFileClass, + pub media_class: ApiMediaFileClass, /// Type of media will dictate which fields are populated and what /// the frontend should display (eg. video player vs audio player). /// This is closer in meaning to a "mime type". - pub media_type: MediaFileType, + pub media_type: ApiMediaFileType, /// If this is an engine/3D asset, this is the broad category (scene, /// animation, etc.) of that object. /// This can also be used for filtering in list/batch endpoints. - pub maybe_engine_category: Option, + pub maybe_engine_category: Option, /// If this is an engine/3D asset for an animation or a rig that can /// be animated with either (or both) skeletal or blend shape animations, /// this describes the animation regime used or supported. - pub maybe_animation_type: Option, + pub maybe_animation_type: Option, /// (DEPRECATED) URL path to the media file #[deprecated(note="This field doesn't point to the full URL. Use media_links instead to leverage the CDN.")] @@ -137,10 +145,10 @@ pub struct FeaturedMediaFile { pub cover_image: MediaFileCoverImageDetails, #[deprecated(note="Use MediaFileOriginDetails instead")] - pub origin_category: MediaFileOriginCategory, + pub origin_category: ApiMediaFileOriginCategory, #[deprecated(note="Use MediaFileOriginDetails instead")] - pub origin_product_category: MediaFileOriginProductCategory, + pub origin_product_category: ApiMediaFileOriginProductCategory, #[deprecated(note="Use MediaFileOriginDetails instead")] pub maybe_origin_model_type: Option, @@ -169,7 +177,7 @@ pub struct FeaturedMediaFile { /// For Comfy / Video Style Transfer jobs, this might include /// the name of the selected style. - pub maybe_style_name: Option, + pub maybe_style_name: Option, /// Duration for audio and video files, if available. /// Measured in milliseconds. @@ -284,10 +292,14 @@ pub async fn list_featured_media_files_handler( ); FeaturedMediaFile { token: m.token.clone(), - media_class: m.media_class, - media_type: m.media_type, - maybe_engine_category: m.maybe_engine_category, - maybe_animation_type: m.maybe_animation_type, + media_class: enums_convert::by_table::media_files::media_file_class::media_file_class_to_api(&m.media_class), + + media_type: enums_convert::by_table::media_files::media_file_type::media_file_type_to_api(&m.media_type), + + maybe_engine_category: enums_convert::by_table::media_files::media_file_engine_category::media_file_engine_category_to_api(&m.maybe_engine_category), + + maybe_animation_type: enums_convert::by_table::media_files::media_file_animation_type::media_file_animation_type_to_api(&m.maybe_animation_type), + media_links: MediaLinksBuilder::from_media_path_and_env( media_domain, server_state.server_environment, @@ -305,14 +317,17 @@ pub async fn list_featured_media_files_handler( m.maybe_file_cover_image_public_bucket_prefix.as_deref(), m.maybe_file_cover_image_public_bucket_extension.as_deref(), ), - origin: MediaFileOriginDetails::from_db_fields_str( + origin: enums_convert::by_table::media_files::media_file_origin_product_category::media_file_origin_product_category_to_api(&MediaFileOriginDetails::from_db_fields_str() + m.origin_category, m.origin_product_category, m.maybe_origin_model_type, m.maybe_origin_model_token.as_deref(), m.maybe_origin_model_title.as_deref()), - origin_category: m.origin_category, - origin_product_category: m.origin_product_category, + origin_category: enums_convert::by_table::media_files::media_file_origin_category::media_file_origin_category_to_api(&m.origin_category), + + origin_product_category: enums_convert::by_table::media_files::media_file_origin_product_category::media_file_origin_product_category_to_api(&m.origin_product_category), + maybe_origin_model_type: m.maybe_origin_model_type .map(|t| PublicMediaFileModelType::from_enum(t)), maybe_origin_model_token: m.maybe_origin_model_token, @@ -326,7 +341,8 @@ pub async fn list_featured_media_files_handler( is_intermediate_system_file: m.is_intermediate_system_file, maybe_title: m.maybe_title, maybe_text_transcript: m.maybe_text_transcript, - maybe_style_name: m.maybe_prompt_args + maybe_style_name: enums_convert::no_table::style_transfer::style_transfer_name::style_transfer_name_to_api(&m.maybe_prompt_args) + .as_ref() .and_then(|args| args.style_name.as_ref()) .and_then(|style| style.to_style_name()), diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/list/list_media_files_by_batch_token_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/list/list_media_files_by_batch_token_handler.rs index 925ab555c6..b2b39e9207 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/list/list_media_files_by_batch_token_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/list/list_media_files_by_batch_token_handler.rs @@ -8,14 +8,22 @@ use artcraft_api_defs::common::responses::media_links::MediaLinks; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use chrono::{DateTime, Utc}; use enums_db::by_table::media_files::media_file_animation_type::MediaFileAnimationType; +use enums_api::by_table::media_files::media_file_animation_type::MediaFileAnimationType as ApiMediaFileAnimationType; use enums_db::by_table::media_files::media_file_class::MediaFileClass; +use enums_api::by_table::media_files::media_file_class::MediaFileClass as ApiMediaFileClass; use enums_db::by_table::media_files::media_file_engine_category::MediaFileEngineCategory; +use enums_api::by_table::media_files::media_file_engine_category::MediaFileEngineCategory as ApiMediaFileEngineCategory; use enums_db::by_table::media_files::media_file_origin_category::MediaFileOriginCategory; +use enums_api::by_table::media_files::media_file_origin_category::MediaFileOriginCategory as ApiMediaFileOriginCategory; use enums_db::by_table::media_files::media_file_origin_product_category::MediaFileOriginProductCategory; +use enums_api::by_table::media_files::media_file_origin_product_category::MediaFileOriginProductCategory as ApiMediaFileOriginProductCategory; use enums_db::by_table::media_files::media_file_type::MediaFileType; +use enums_api::by_table::media_files::media_file_type::MediaFileType as ApiMediaFileType; use enums_db::common::view_as::ViewAs; +use enums_api::common::view_as::ViewAs as ApiViewAs; use enums_db::common::visibility::Visibility; use enums_db::no_table::style_transfer::style_transfer_name::StyleTransferName; +use enums_api::no_table::style_transfer::style_transfer_name::StyleTransferName as ApiStyleTransferName; use enums_public::by_table::media_files::public_media_file_model_type::PublicMediaFileModelType; use log::warn; use mysql_queries::queries::media_files::list::list_media_files_by_batch_token::{list_media_files_by_batch_token, ListMediaFileByBatchArgs}; @@ -46,7 +54,7 @@ pub struct ListMediaFilesByBatchQueryParams { pub page_index: Option, #[deprecated(note="This field has no meaning for this endpoint. Not sure why it was added.")] - pub filter_media_type: Option, + pub filter_media_type: Option, } #[derive(Serialize, ToSchema)] @@ -61,31 +69,31 @@ pub struct MediaFilesByBatchListItem { pub token: MediaFileToken, /// The coarse-grained class of media file: image, video, etc. - pub media_class: MediaFileClass, + pub media_class: ApiMediaFileClass, /// Type of media will dictate which fields are populated and what /// the frontend should display (eg. video player vs audio player). /// This is closer in meaning to a "mime type". - pub media_type: MediaFileType, + pub media_type: ApiMediaFileType, /// If this is an engine/3D asset, this is the broad category (scene, /// animation, etc.) of that object. /// This can also be used for filtering in list/batch endpoints. - pub maybe_engine_category: Option, + pub maybe_engine_category: Option, /// If this is an engine/3D asset for an animation or a rig that can /// be animated with either (or both) skeletal or blend shape animations, /// this describes the animation regime used or supported. - pub maybe_animation_type: Option, + pub maybe_animation_type: Option, /// Details where the media file came from. pub origin: MediaFileOriginDetails, #[deprecated(note="Use MediaFileOriginDetails instead")] - pub origin_category: MediaFileOriginCategory, + pub origin_category: ApiMediaFileOriginCategory, #[deprecated(note="Use MediaFileOriginDetails instead")] - pub origin_product_category: MediaFileOriginProductCategory, + pub origin_product_category: ApiMediaFileOriginProductCategory, #[deprecated(note="Use MediaFileOriginDetails instead")] pub maybe_origin_model_type: Option, @@ -127,7 +135,7 @@ pub struct MediaFilesByBatchListItem { /// For Comfy / Video Style Transfer jobs, this might include /// the name of the selected style. - pub maybe_style_name: Option, + pub maybe_style_name: Option, /// Duration for audio and video files, if available. /// Measured in milliseconds. @@ -240,16 +248,23 @@ pub async fn list_media_files_by_batch_token_handler( // Don't allow access to certain media types. match record.media_type { MediaFileType::Bvh | + MediaFileType::Fbx | + MediaFileType::Glb | + MediaFileType::Gltf => return false, + _ => {}, } // Don't allow access to certain products. match record.origin_product_category { MediaFileOriginProductCategory::VideoFilter | + MediaFileOriginProductCategory::Mocap | + MediaFileOriginProductCategory::Workflow => return false, + _ => {}, } true @@ -262,18 +277,25 @@ pub async fn list_media_files_by_batch_token_handler( ); MediaFilesByBatchListItem { token: record.token.clone(), - media_class: record.media_class, - media_type: record.media_type, - maybe_engine_category: record.maybe_engine_category, - maybe_animation_type: record.maybe_animation_type, - origin: MediaFileOriginDetails::from_db_fields_str( + media_class: enums_convert::by_table::media_files::media_file_class::media_file_class_to_api(&record.media_class), + + media_type: enums_convert::by_table::media_files::media_file_type::media_file_type_to_api(&record.media_type), + + maybe_engine_category: enums_convert::by_table::media_files::media_file_engine_category::media_file_engine_category_to_api(&record.maybe_engine_category), + + maybe_animation_type: enums_convert::by_table::media_files::media_file_animation_type::media_file_animation_type_to_api(&record.maybe_animation_type), + + origin: enums_convert::by_table::media_files::media_file_origin_product_category::media_file_origin_product_category_to_api(&MediaFileOriginDetails::from_db_fields_str() + record.origin_category, record.origin_product_category, record.maybe_origin_model_type, record.maybe_origin_model_token.as_deref(), record.maybe_origin_model_title.as_deref()), - origin_category: record.origin_category, - origin_product_category: record.origin_product_category, + origin_category: enums_convert::by_table::media_files::media_file_origin_category::media_file_origin_category_to_api(&record.origin_category), + + origin_product_category: enums_convert::by_table::media_files::media_file_origin_product_category::media_file_origin_product_category_to_api(&record.origin_product_category), + maybe_origin_model_type: record.maybe_origin_model_type .map(|t| PublicMediaFileModelType::from_enum(t)), maybe_origin_model_token: record.maybe_origin_model_token, @@ -287,12 +309,14 @@ pub async fn list_media_files_by_batch_token_handler( .to_string(), public_bucket_url: bucket_url_string_from_media_path(&public_bucket_path, media_domain, server_state.server_environment), cover_image: MediaFileCoverImageDetails::from_token(&record.token), - creator_set_visibility: record.creator_set_visibility, + creator_set_visibility: enums_convert::common::visibility::visibility_to_api(&record.creator_set_visibility), + is_user_upload: record.is_user_upload, is_intermediate_system_file: record.is_intermediate_system_file, maybe_title: record.maybe_title, maybe_text_transcript: record.maybe_text_transcript, - maybe_style_name: record.maybe_prompt_args + maybe_style_name: enums_convert::no_table::style_transfer::style_transfer_name::style_transfer_name_to_api(&record.maybe_prompt_args) + .as_ref() .and_then(|args| args.style_name.as_ref()) .and_then(|style| style.to_style_name()), diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/list/list_media_files_for_user_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/list/list_media_files_for_user_handler.rs index 9bd932f28f..2e69d77566 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/list/list_media_files_for_user_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/list/list_media_files_for_user_handler.rs @@ -8,14 +8,22 @@ use artcraft_api_defs::common::responses::media_links::MediaLinks; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use chrono::{DateTime, Utc}; use enums_db::by_table::media_files::media_file_animation_type::MediaFileAnimationType; +use enums_api::by_table::media_files::media_file_animation_type::MediaFileAnimationType as ApiMediaFileAnimationType; use enums_db::by_table::media_files::media_file_class::MediaFileClass; +use enums_api::by_table::media_files::media_file_class::MediaFileClass as ApiMediaFileClass; use enums_db::by_table::media_files::media_file_engine_category::MediaFileEngineCategory; +use enums_api::by_table::media_files::media_file_engine_category::MediaFileEngineCategory as ApiMediaFileEngineCategory; use enums_db::by_table::media_files::media_file_origin_category::MediaFileOriginCategory; +use enums_api::by_table::media_files::media_file_origin_category::MediaFileOriginCategory as ApiMediaFileOriginCategory; use enums_db::by_table::media_files::media_file_origin_product_category::MediaFileOriginProductCategory; +use enums_api::by_table::media_files::media_file_origin_product_category::MediaFileOriginProductCategory as ApiMediaFileOriginProductCategory; use enums_db::by_table::media_files::media_file_type::MediaFileType; +use enums_api::by_table::media_files::media_file_type::MediaFileType as ApiMediaFileType; use enums_db::common::view_as::ViewAs; +use enums_api::common::view_as::ViewAs as ApiViewAs; use enums_db::common::visibility::Visibility; use enums_db::no_table::style_transfer::style_transfer_name::StyleTransferName; +use enums_api::no_table::style_transfer::style_transfer_name::StyleTransferName as ApiStyleTransferName; use enums_public::by_table::media_files::public_media_file_model_type::PublicMediaFileModelType; use log::{info, warn}; use mysql_queries::queries::media_files::list::list_media_files_for_user::{list_media_files_for_user, ListMediaFileForUserArgs}; @@ -96,31 +104,31 @@ pub struct MediaFileForUserListItem { pub token: MediaFileToken, /// The coarse-grained class of media file: image, video, etc. - pub media_class: MediaFileClass, + pub media_class: ApiMediaFileClass, /// Type of media will dictate which fields are populated and what /// the frontend should display (eg. video player vs audio player). /// This is closer in meaning to a "mime type". - pub media_type: MediaFileType, + pub media_type: ApiMediaFileType, /// If this is an engine/3D asset, this is the broad category (scene, /// animation, etc.) of that object. /// This can also be used for filtering in list/batch endpoints. - pub maybe_engine_category: Option, + pub maybe_engine_category: Option, /// If this is an engine/3D asset for an animation or a rig that can /// be animated with either (or both) skeletal or blend shape animations, /// this describes the animation regime used or supported. - pub maybe_animation_type: Option, + pub maybe_animation_type: Option, /// Details where the media file came from. pub origin: MediaFileOriginDetails, #[deprecated(note="Use MediaFileOriginDetails instead")] - pub origin_category: MediaFileOriginCategory, + pub origin_category: ApiMediaFileOriginCategory, #[deprecated(note="Use MediaFileOriginDetails instead")] - pub origin_product_category: MediaFileOriginProductCategory, + pub origin_product_category: ApiMediaFileOriginProductCategory, #[deprecated(note="Use MediaFileOriginDetails instead")] pub maybe_origin_model_type: Option, @@ -162,7 +170,7 @@ pub struct MediaFileForUserListItem { /// For Comfy / Video Style Transfer jobs, this might include /// the name of the selected style. - pub maybe_style_name: Option, + pub maybe_style_name: Option, /// Duration for audio and video files, if available. /// Measured in milliseconds. @@ -301,10 +309,15 @@ pub async fn list_media_files_for_user_handler( // Don't allow access to certain media types. match record.media_type { MediaFileType::Bvh | + MediaFileType::Fbx | + MediaFileType::Glb | + MediaFileType::Gltf | + MediaFileType::SceneRon => return false, + _ => {}, } // // Don't allow access to certain products. @@ -324,18 +337,25 @@ pub async fn list_media_files_for_user_handler( ); MediaFileForUserListItem { token: record.token.clone(), - media_class: record.media_class, - media_type: record.media_type, - maybe_engine_category: record.maybe_engine_category, - maybe_animation_type: record.maybe_animation_type, - origin: MediaFileOriginDetails::from_db_fields_str( + media_class: enums_convert::by_table::media_files::media_file_class::media_file_class_to_api(&record.media_class), + + media_type: enums_convert::by_table::media_files::media_file_type::media_file_type_to_api(&record.media_type), + + maybe_engine_category: enums_convert::by_table::media_files::media_file_engine_category::media_file_engine_category_to_api(&record.maybe_engine_category), + + maybe_animation_type: enums_convert::by_table::media_files::media_file_animation_type::media_file_animation_type_to_api(&record.maybe_animation_type), + + origin: enums_convert::by_table::media_files::media_file_origin_product_category::media_file_origin_product_category_to_api(&MediaFileOriginDetails::from_db_fields_str() + record.origin_category, record.origin_product_category, record.maybe_origin_model_type, record.maybe_origin_model_token.as_deref(), record.maybe_origin_model_title.as_deref()), - origin_category: record.origin_category, - origin_product_category: record.origin_product_category, + origin_category: enums_convert::by_table::media_files::media_file_origin_category::media_file_origin_category_to_api(&record.origin_category), + + origin_product_category: enums_convert::by_table::media_files::media_file_origin_product_category::media_file_origin_product_category_to_api(&record.origin_product_category), + maybe_origin_model_type: record.maybe_origin_model_type .map(|t| PublicMediaFileModelType::from_enum(t)), maybe_origin_model_token: record.maybe_origin_model_token, @@ -353,12 +373,14 @@ pub async fn list_media_files_for_user_handler( record.maybe_file_cover_image_public_bucket_prefix.as_deref(), record.maybe_file_cover_image_public_bucket_extension.as_deref(), ), - creator_set_visibility: record.creator_set_visibility, + creator_set_visibility: enums_convert::common::visibility::visibility_to_api(&record.creator_set_visibility), + is_user_upload: record.is_user_upload, is_intermediate_system_file: record.is_intermediate_system_file, maybe_title: record.maybe_title, maybe_text_transcript: record.maybe_text_transcript, - maybe_style_name: record.maybe_prompt_args + maybe_style_name: enums_convert::no_table::style_transfer::style_transfer_name::style_transfer_name_to_api(&record.maybe_prompt_args) + .as_ref() .and_then(|args| args.style_name.as_ref()) .and_then(|style| style.to_style_name()), diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/list/list_media_files_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/list/list_media_files_handler.rs index 89d4f5c49c..8465504aaa 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/list/list_media_files_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/list/list_media_files_handler.rs @@ -8,14 +8,22 @@ use artcraft_api_defs::common::responses::media_links::MediaLinks; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use chrono::{DateTime, Utc}; use enums_db::by_table::media_files::media_file_animation_type::MediaFileAnimationType; +use enums_api::by_table::media_files::media_file_animation_type::MediaFileAnimationType as ApiMediaFileAnimationType; use enums_db::by_table::media_files::media_file_class::MediaFileClass; +use enums_api::by_table::media_files::media_file_class::MediaFileClass as ApiMediaFileClass; use enums_db::by_table::media_files::media_file_engine_category::MediaFileEngineCategory; +use enums_api::by_table::media_files::media_file_engine_category::MediaFileEngineCategory as ApiMediaFileEngineCategory; use enums_db::by_table::media_files::media_file_origin_category::MediaFileOriginCategory; +use enums_api::by_table::media_files::media_file_origin_category::MediaFileOriginCategory as ApiMediaFileOriginCategory; use enums_db::by_table::media_files::media_file_origin_product_category::MediaFileOriginProductCategory; +use enums_api::by_table::media_files::media_file_origin_product_category::MediaFileOriginProductCategory as ApiMediaFileOriginProductCategory; use enums_db::by_table::media_files::media_file_type::MediaFileType; +use enums_api::by_table::media_files::media_file_type::MediaFileType as ApiMediaFileType; use enums_db::common::view_as::ViewAs; +use enums_api::common::view_as::ViewAs as ApiViewAs; use enums_db::common::visibility::Visibility; use enums_db::no_table::style_transfer::style_transfer_name::StyleTransferName; +use enums_api::no_table::style_transfer::style_transfer_name::StyleTransferName as ApiStyleTransferName; use enums_public::by_table::media_files::public_media_file_model_type::PublicMediaFileModelType; use log::warn; use mysql_queries::queries::media_files::list::list_media_files::{list_media_files, ListMediaFilesArgs}; @@ -93,28 +101,28 @@ pub struct MediaFileListItem { pub token: MediaFileToken, /// The coarse-grained class of media file: image, video, etc. - pub media_class: MediaFileClass, + pub media_class: ApiMediaFileClass, /// Type of media will dictate which fields are populated and what /// the frontend should display (eg. video player vs audio player). /// This is closer in meaning to a "mime type". - pub media_type: MediaFileType, + pub media_type: ApiMediaFileType, /// If this is an engine/3D asset, this is the broad category (scene, /// animation, etc.) of that object. /// This can also be used for filtering in list/batch endpoints. - pub maybe_engine_category: Option, + pub maybe_engine_category: Option, /// If this is an engine/3D asset for an animation or a rig that can /// be animated with either (or both) skeletal or blend shape animations, /// this describes the animation regime used or supported. - pub maybe_animation_type: Option, + pub maybe_animation_type: Option, #[deprecated(note="Use MediaFileOriginDetails instead")] - pub origin_category: MediaFileOriginCategory, + pub origin_category: ApiMediaFileOriginCategory, #[deprecated(note="Use MediaFileOriginDetails instead")] - pub origin_product_category: MediaFileOriginProductCategory, + pub origin_product_category: ApiMediaFileOriginProductCategory, #[deprecated(note="Use MediaFileOriginDetails instead")] pub maybe_origin_model_type: Option, @@ -164,7 +172,7 @@ pub struct MediaFileListItem { /// For Comfy / Video Style Transfer jobs, this might include /// the name of the selected style. - pub maybe_style_name: Option, + pub maybe_style_name: Option, /// Duration for audio and video files, if available. /// Measured in milliseconds. @@ -330,18 +338,25 @@ pub async fn list_media_files_handler( ); MediaFileListItem { token: record.token.clone(), - media_class: record.media_class, - media_type: record.media_type, - maybe_engine_category: record.maybe_engine_category, - maybe_animation_type: record.maybe_animation_type, - origin: MediaFileOriginDetails::from_db_fields_str( + media_class: enums_convert::by_table::media_files::media_file_class::media_file_class_to_api(&record.media_class), + + media_type: enums_convert::by_table::media_files::media_file_type::media_file_type_to_api(&record.media_type), + + maybe_engine_category: enums_convert::by_table::media_files::media_file_engine_category::media_file_engine_category_to_api(&record.maybe_engine_category), + + maybe_animation_type: enums_convert::by_table::media_files::media_file_animation_type::media_file_animation_type_to_api(&record.maybe_animation_type), + + origin: enums_convert::by_table::media_files::media_file_origin_product_category::media_file_origin_product_category_to_api(&MediaFileOriginDetails::from_db_fields_str() + record.origin_category, record.origin_product_category, record.maybe_origin_model_type, record.maybe_origin_model_token.as_deref(), record.maybe_origin_model_title.as_deref()), - origin_category: record.origin_category, - origin_product_category: record.origin_product_category, + origin_category: enums_convert::by_table::media_files::media_file_origin_category::media_file_origin_category_to_api(&record.origin_category), + + origin_product_category: enums_convert::by_table::media_files::media_file_origin_product_category::media_file_origin_product_category_to_api(&record.origin_product_category), + maybe_origin_model_type: record.maybe_origin_model_type .map(|m| PublicMediaFileModelType::from_enum(m)), maybe_origin_model_token: record.maybe_origin_model_token, @@ -372,12 +387,14 @@ pub async fn list_media_files_handler( positive_rating_count: record.maybe_ratings_positive_count.unwrap_or(0), bookmark_count: record.maybe_bookmark_count.unwrap_or(0), }, - creator_set_visibility: record.creator_set_visibility, + creator_set_visibility: enums_convert::common::visibility::visibility_to_api(&record.creator_set_visibility), + is_user_upload: record.is_user_upload, is_intermediate_system_file: record.is_intermediate_system_file, maybe_title: record.maybe_title, maybe_text_transcript: record.maybe_text_transcript, - maybe_style_name: record.maybe_prompt_args + maybe_style_name: enums_convert::no_table::style_transfer::style_transfer_name::style_transfer_name_to_api(&record.maybe_prompt_args) + .as_ref() .and_then(|args| args.style_name.as_ref()) .and_then(|style| style.to_style_name()), diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/list/list_pinned_media_files_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/list/list_pinned_media_files_handler.rs index ebeefb7ff2..be6b8ddda9 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/list/list_pinned_media_files_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/list/list_pinned_media_files_handler.rs @@ -7,12 +7,19 @@ use artcraft_api_defs::common::responses::media_links::MediaLinks; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use chrono::{DateTime, Utc}; use enums_db::by_table::media_files::media_file_animation_type::MediaFileAnimationType; +use enums_api::by_table::media_files::media_file_animation_type::MediaFileAnimationType as ApiMediaFileAnimationType; use enums_db::by_table::media_files::media_file_class::MediaFileClass; +use enums_api::by_table::media_files::media_file_class::MediaFileClass as ApiMediaFileClass; use enums_db::by_table::media_files::media_file_engine_category::MediaFileEngineCategory; +use enums_api::by_table::media_files::media_file_engine_category::MediaFileEngineCategory as ApiMediaFileEngineCategory; use enums_db::by_table::media_files::media_file_origin_category::MediaFileOriginCategory; +use enums_api::by_table::media_files::media_file_origin_category::MediaFileOriginCategory as ApiMediaFileOriginCategory; use enums_db::by_table::media_files::media_file_origin_product_category::MediaFileOriginProductCategory; +use enums_api::by_table::media_files::media_file_origin_product_category::MediaFileOriginProductCategory as ApiMediaFileOriginProductCategory; use enums_db::by_table::media_files::media_file_type::MediaFileType; +use enums_api::by_table::media_files::media_file_type::MediaFileType as ApiMediaFileType; use enums_db::no_table::style_transfer::style_transfer_name::StyleTransferName; +use enums_api::no_table::style_transfer::style_transfer_name::StyleTransferName as ApiStyleTransferName; use enums_public::by_table::media_files::public_media_file_model_type::PublicMediaFileModelType; use log::{debug, error, warn}; use mysql_queries::queries::media_files::get::batch_get_media_files_by_tokens::batch_get_media_files_by_tokens; @@ -40,22 +47,22 @@ pub struct PinnedMediaFile { pub token: MediaFileToken, /// The coarse-grained class of media file: image, video, etc. - pub media_class: MediaFileClass, + pub media_class: ApiMediaFileClass, /// Type of media will dictate which fields are populated and what /// the frontend should display (eg. video player vs audio player). /// This is closer in meaning to a "mime type". - pub media_type: MediaFileType, + pub media_type: ApiMediaFileType, /// If this is an engine/3D asset, this is the broad category (scene, /// animation, etc.) of that object. /// This can also be used for filtering in list/batch endpoints. - pub maybe_engine_category: Option, + pub maybe_engine_category: Option, /// If this is an engine/3D asset for an animation or a rig that can /// be animated with either (or both) skeletal or blend shape animations, /// this describes the animation regime used or supported. - pub maybe_animation_type: Option, + pub maybe_animation_type: Option, /// (DEPRECATED) URL path to the media file #[deprecated(note="This field doesn't point to the full URL. Use media_links instead to leverage the CDN.")] @@ -74,10 +81,10 @@ pub struct PinnedMediaFile { pub cover_image: MediaFileCoverImageDetails, #[deprecated(note="Use MediaFileOriginDetails instead")] - pub origin_category: MediaFileOriginCategory, + pub origin_category: ApiMediaFileOriginCategory, #[deprecated(note="Use MediaFileOriginDetails instead")] - pub origin_product_category: MediaFileOriginProductCategory, + pub origin_product_category: ApiMediaFileOriginProductCategory, #[deprecated(note="Use MediaFileOriginDetails instead")] pub maybe_origin_model_type: Option, @@ -106,7 +113,7 @@ pub struct PinnedMediaFile { /// For Comfy / Video Style Transfer jobs, this might include /// the name of the selected style. - pub maybe_style_name: Option, + pub maybe_style_name: Option, /// Duration for audio and video files, if available. /// Measured in milliseconds. @@ -211,10 +218,14 @@ pub async fn list_pinned_media_files_handler( PinnedMediaFile { token: m.token.clone(), - media_class: m.media_class, - media_type: m.media_type, - maybe_engine_category: m.maybe_engine_category, - maybe_animation_type: m.maybe_animation_type, + media_class: enums_convert::by_table::media_files::media_file_class::media_file_class_to_api(&m.media_class), + + media_type: enums_convert::by_table::media_files::media_file_type::media_file_type_to_api(&m.media_type), + + maybe_engine_category: enums_convert::by_table::media_files::media_file_engine_category::media_file_engine_category_to_api(&m.maybe_engine_category), + + maybe_animation_type: enums_convert::by_table::media_files::media_file_animation_type::media_file_animation_type_to_api(&m.maybe_animation_type), + media_links: MediaLinksBuilder::from_media_path_and_env( media_domain, server_state.server_environment, @@ -232,14 +243,17 @@ pub async fn list_pinned_media_files_handler( m.maybe_file_cover_image_public_bucket_prefix.as_deref(), m.maybe_file_cover_image_public_bucket_extension.as_deref(), ), - origin: MediaFileOriginDetails::from_db_fields_str( + origin: enums_convert::by_table::media_files::media_file_origin_product_category::media_file_origin_product_category_to_api(&MediaFileOriginDetails::from_db_fields_str() + m.origin_category, m.origin_product_category, m.maybe_origin_model_type, m.maybe_origin_model_token.as_deref(), m.maybe_origin_model_title.as_deref()), - origin_category: m.origin_category, - origin_product_category: m.origin_product_category, + origin_category: enums_convert::by_table::media_files::media_file_origin_category::media_file_origin_category_to_api(&m.origin_category), + + origin_product_category: enums_convert::by_table::media_files::media_file_origin_product_category::media_file_origin_product_category_to_api(&m.origin_product_category), + maybe_origin_model_type: m.maybe_origin_model_type .map(|m| PublicMediaFileModelType::from_enum(m)), maybe_origin_model_token: m.maybe_origin_model_token, @@ -253,7 +267,8 @@ pub async fn list_pinned_media_files_handler( is_intermediate_system_file: m.is_intermediate_system_file, maybe_title: m.maybe_title, maybe_text_transcript: m.maybe_text_transcript, - maybe_style_name: m.maybe_prompt_args + maybe_style_name: enums_convert::no_table::style_transfer::style_transfer_name::style_transfer_name_to_api(&m.maybe_prompt_args) + .as_ref() .and_then(|args| args.style_name.as_ref()) .and_then(|style| style.to_style_name()), diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/search/search_featured_media_files_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/search/search_featured_media_files_handler.rs index 16c7a844dd..7cf768ce5e 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/search/search_featured_media_files_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/search/search_featured_media_files_handler.rs @@ -9,9 +9,13 @@ use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path: use chrono::{DateTime, Utc}; use elasticsearch_schema::searches::search_media_files::{search_media_files, SearchArgs}; use enums_db::by_table::media_files::media_file_animation_type::MediaFileAnimationType; +use enums_api::by_table::media_files::media_file_animation_type::MediaFileAnimationType as ApiMediaFileAnimationType; use enums_db::by_table::media_files::media_file_class::MediaFileClass; +use enums_api::by_table::media_files::media_file_class::MediaFileClass as ApiMediaFileClass; use enums_db::by_table::media_files::media_file_engine_category::MediaFileEngineCategory; +use enums_api::by_table::media_files::media_file_engine_category::MediaFileEngineCategory as ApiMediaFileEngineCategory; use enums_db::by_table::media_files::media_file_type::MediaFileType; +use enums_api::by_table::media_files::media_file_type::MediaFileType as ApiMediaFileType; use enums_db::common::visibility::Visibility; use log::warn; use tokens::tokens::media_files::MediaFileToken; @@ -75,22 +79,22 @@ pub struct SearchFeaturedMediaFileListItem { pub token: MediaFileToken, /// The coarse-grained class of media file: image, video, etc. - pub media_class: MediaFileClass, + pub media_class: ApiMediaFileClass, /// Type of media will dictate which fields are populated and what /// the frontend should display (eg. video player vs audio player). /// This is closer in meaning to a "mime type". - pub media_type: MediaFileType, + pub media_type: ApiMediaFileType, /// If this is an engine/3D asset, this is the broad category (scene, /// animation, etc.) of that object. /// This can also be used for filtering in list/batch endpoints. - pub maybe_engine_category: Option, + pub maybe_engine_category: Option, /// If this is an engine/3D asset for an animation or a rig that can /// be animated with either (or both) skeletal or blend shape animations, /// this describes the animation regime used or supported. - pub maybe_animation_type: Option, + pub maybe_animation_type: Option, /// (DEPRECATED) URL path to the media file #[deprecated(note="This field doesn't point to the full URL. Use media_links instead to leverage the CDN.")] @@ -223,10 +227,14 @@ pub async fn search_featured_media_files_handler( result.maybe_public_bucket_extension.as_deref()); SearchFeaturedMediaFileListItem { token: result.token.clone(), - media_class: result.media_class, - media_type: result.media_type, - maybe_engine_category: result.maybe_engine_category, - maybe_animation_type: result.maybe_animation_type, + media_class: enums_convert::by_table::media_files::media_file_class::media_file_class_to_api(&result.media_class), + + media_type: enums_convert::by_table::media_files::media_file_type::media_file_type_to_api(&result.media_type), + + maybe_engine_category: enums_convert::by_table::media_files::media_file_engine_category::media_file_engine_category_to_api(&result.maybe_engine_category), + + maybe_animation_type: enums_convert::by_table::media_files::media_file_animation_type::media_file_animation_type_to_api(&result.maybe_animation_type), + media_links: MediaLinksBuilder::from_media_path_and_env( media_domain, server_state.server_environment, @@ -257,7 +265,8 @@ pub async fn search_featured_media_files_handler( is_user_upload: result.is_user_upload.unwrap_or(false), is_intermediate_system_file: result.is_intermediate_system_file.unwrap_or(false), is_featured: result.is_featured, - creator_set_visibility: result.creator_set_visibility, + creator_set_visibility: enums_convert::common::visibility::visibility_to_api(&result.creator_set_visibility), + maybe_title: result.maybe_title, // maybe_text_transcript: result.maybe_text_transcript, // maybe_style_name: result.maybe_prompt_args diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/search/search_session_media_files_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/search/search_session_media_files_handler.rs index 6eeb98eb1c..f0a592c609 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/search/search_session_media_files_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/search/search_session_media_files_handler.rs @@ -9,9 +9,13 @@ use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path: use chrono::{DateTime, Utc}; use elasticsearch_schema::searches::search_media_files::{search_media_files, SearchArgs}; use enums_db::by_table::media_files::media_file_animation_type::MediaFileAnimationType; +use enums_api::by_table::media_files::media_file_animation_type::MediaFileAnimationType as ApiMediaFileAnimationType; use enums_db::by_table::media_files::media_file_class::MediaFileClass; +use enums_api::by_table::media_files::media_file_class::MediaFileClass as ApiMediaFileClass; use enums_db::by_table::media_files::media_file_engine_category::MediaFileEngineCategory; +use enums_api::by_table::media_files::media_file_engine_category::MediaFileEngineCategory as ApiMediaFileEngineCategory; use enums_db::by_table::media_files::media_file_type::MediaFileType; +use enums_api::by_table::media_files::media_file_type::MediaFileType as ApiMediaFileType; use enums_db::common::visibility::Visibility; use log::warn; use tokens::tokens::media_files::MediaFileToken; @@ -76,22 +80,22 @@ pub struct SearchMediaFileListItem { pub token: MediaFileToken, /// The coarse-grained class of media file: image, video, etc. - pub media_class: MediaFileClass, + pub media_class: ApiMediaFileClass, /// Type of media will dictate which fields are populated and what /// the frontend should display (eg. video player vs audio player). /// This is closer in meaning to a "mime type". - pub media_type: MediaFileType, + pub media_type: ApiMediaFileType, /// If this is an engine/3D asset, this is the broad category (scene, /// animation, etc.) of that object. /// This can also be used for filtering in list/batch endpoints. - pub maybe_engine_category: Option, + pub maybe_engine_category: Option, /// If this is an engine/3D asset for an animation or a rig that can /// be animated with either (or both) skeletal or blend shape animations, /// this describes the animation regime used or supported. - pub maybe_animation_type: Option, + pub maybe_animation_type: Option, /// (DEPRECATED) URL path to the media file #[deprecated(note="This field doesn't point to the full URL. Use media_links instead to leverage the CDN.")] @@ -250,10 +254,14 @@ pub async fn search_session_media_files_handler( result.maybe_public_bucket_extension.as_deref()); SearchMediaFileListItem { token: result.token.clone(), - media_class: result.media_class, - media_type: result.media_type, - maybe_engine_category: result.maybe_engine_category, - maybe_animation_type: result.maybe_animation_type, + media_class: enums_convert::by_table::media_files::media_file_class::media_file_class_to_api(&result.media_class), + + media_type: enums_convert::by_table::media_files::media_file_type::media_file_type_to_api(&result.media_type), + + maybe_engine_category: enums_convert::by_table::media_files::media_file_engine_category::media_file_engine_category_to_api(&result.maybe_engine_category), + + maybe_animation_type: enums_convert::by_table::media_files::media_file_animation_type::media_file_animation_type_to_api(&result.maybe_animation_type), + media_links: MediaLinksBuilder::from_media_path_and_env( media_domain, server_state.server_environment, @@ -284,7 +292,8 @@ pub async fn search_session_media_files_handler( is_featured: result.is_featured, is_user_upload: result.is_user_upload.unwrap_or(false), is_intermediate_system_file: result.is_intermediate_system_file.unwrap_or(false), - creator_set_visibility: result.creator_set_visibility, + creator_set_visibility: enums_convert::common::visibility::visibility_to_api(&result.creator_set_visibility), + maybe_title: result.maybe_title, // maybe_text_transcript: result.maybe_text_transcript, // maybe_style_name: result.maybe_prompt_args diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_audio_media_file_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_audio_media_file_handler.rs index 12ba674559..39a658d090 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_audio_media_file_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_audio_media_file_handler.rs @@ -14,7 +14,9 @@ use utoipa::ToSchema; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use enums_db::by_table::media_files::media_file_class::MediaFileClass; +use enums_api::by_table::media_files::media_file_class::MediaFileClass as ApiMediaFileClass; use enums_db::by_table::media_files::media_file_type::MediaFileType; +use enums_api::by_table::media_files::media_file_type::MediaFileType as ApiMediaFileType; use enums_db::common::visibility::Visibility; use hashing::sha256::sha256_hash_bytes::sha256_hash_bytes; use http_server_common::request::get_request_ip::get_request_ip; @@ -315,7 +317,8 @@ pub async fn upload_audio_media_file_handler( })?; let (token, record_id) = insert_media_file_from_file_upload(InsertMediaFileFromUploadArgs { - maybe_media_class: Some(MediaFileClass::Audio), + maybe_media_class: Some(enums_convert::by_table::media_files::media_file_class::media_file_class_to_api(&MediaFileClass::Audio)), + media_file_type: MediaFileType::Audio, maybe_creator_user_token: maybe_user_token.as_ref(), maybe_creator_anonymous_visitor_token: maybe_avt_token.as_ref(), diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_engine_asset/upload_engine_asset_media_file_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_engine_asset/upload_engine_asset_media_file_handler.rs index fc4cd2cc02..72924680a9 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_engine_asset/upload_engine_asset_media_file_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_engine_asset/upload_engine_asset_media_file_handler.rs @@ -8,7 +8,9 @@ use utoipa::ToSchema; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use enums_db::by_table::media_files::media_file_class::MediaFileClass; +use enums_api::by_table::media_files::media_file_class::MediaFileClass as ApiMediaFileClass; use enums_db::by_table::media_files::media_file_type::MediaFileType; +use enums_api::by_table::media_files::media_file_type::MediaFileType as ApiMediaFileType; use enums_db::common::visibility::Visibility; use hashing::sha256::sha256_hash_bytes::sha256_hash_bytes; use http_server_common::request::get_request_ip::get_request_ip; @@ -203,7 +205,8 @@ pub async fn upload_engine_asset_media_file_handler( // TODO(bt, 2024-02-22): This should be a transaction. let (token, record_id) = insert_media_file_from_file_upload(InsertMediaFileFromUploadArgs { - maybe_media_class: Some(MediaFileClass::Dimensional), + maybe_media_class: Some(enums_convert::by_table::media_files::media_file_class::media_file_class_to_api(&MediaFileClass::Dimensional)), + media_file_type, maybe_creator_user_token: maybe_user_token.as_ref(), maybe_creator_anonymous_visitor_token: maybe_avt_token.as_ref(), diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_image_media_file_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_image_media_file_handler.rs index 4f34833070..6c8a55b8ea 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_image_media_file_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_image_media_file_handler.rs @@ -17,7 +17,9 @@ use crate::http_server::validations::validate_idempotency_token_format::validate use crate::state::server_state::ServerState; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use enums_db::by_table::media_files::media_file_class::MediaFileClass; +use enums_api::by_table::media_files::media_file_class::MediaFileClass as ApiMediaFileClass; use enums_db::by_table::media_files::media_file_type::MediaFileType; +use enums_api::by_table::media_files::media_file_type::MediaFileType as ApiMediaFileType; use enums_db::common::visibility::Visibility; use hashing::sha256::sha256_hash_bytes::sha256_hash_bytes; use http_server_common::request::get_request_ip::get_request_ip; @@ -283,7 +285,8 @@ pub async fn upload_image_media_file_handler( .map(|token| token.0.clone()); let (token, record_id) = insert_media_file_from_file_upload(InsertMediaFileFromUploadArgs { - maybe_media_class: Some(MediaFileClass::Image), + maybe_media_class: Some(enums_convert::by_table::media_files::media_file_class::media_file_class_to_api(&MediaFileClass::Image)), + media_file_type: MediaFileType::Image, maybe_creator_user_token: maybe_user_token.as_ref(), maybe_creator_anonymous_visitor_token: maybe_avt_token.as_ref(), diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_new_engine_asset_media_file_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_new_engine_asset_media_file_handler.rs index a226e73933..101b0958f7 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_new_engine_asset_media_file_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_new_engine_asset_media_file_handler.rs @@ -12,9 +12,13 @@ use utoipa::ToSchema; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use enums_db::by_table::media_files::media_file_animation_type::MediaFileAnimationType; +use enums_api::by_table::media_files::media_file_animation_type::MediaFileAnimationType as ApiMediaFileAnimationType; use enums_db::by_table::media_files::media_file_class::MediaFileClass; +use enums_api::by_table::media_files::media_file_class::MediaFileClass as ApiMediaFileClass; use enums_db::by_table::media_files::media_file_engine_category::MediaFileEngineCategory; +use enums_api::by_table::media_files::media_file_engine_category::MediaFileEngineCategory as ApiMediaFileEngineCategory; use enums_db::by_table::media_files::media_file_type::MediaFileType; +use enums_api::by_table::media_files::media_file_type::MediaFileType as ApiMediaFileType; use enums_db::common::visibility::Visibility; use hashing::sha256::sha256_hash_bytes::sha256_hash_bytes; use http_server_common::request::get_request_ip::get_request_ip; @@ -199,17 +203,22 @@ pub async fn upload_new_engine_asset_media_file_handler( // TODO(bt, 2024-02-22): This should be a transaction. let (token, record_id) = insert_media_file_from_file_upload(InsertMediaFileFromUploadArgs { - maybe_media_class: Some(file_info.media_class), - media_file_type: file_info.media_type, + maybe_media_class: Some(enums_convert::by_table::media_files::media_file_class::media_file_class_to_api(&file_info.media_class)), + + media_file_type: enums_convert::by_table::media_files::media_file_type::media_file_type_to_api(&file_info.media_type), + maybe_creator_user_token: maybe_user_token.as_ref(), maybe_creator_anonymous_visitor_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: file_info.creator_set_visibility, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&file_info.creator_set_visibility), + upload_type: UploadType::Filesystem, maybe_prompt_token: None, maybe_batch_token: None, - maybe_engine_category: Some(file_info.engine_category), - maybe_animation_type: file_info.maybe_animation_type, + maybe_engine_category: Some(enums_convert::by_table::media_files::media_file_engine_category::media_file_engine_category_to_api(&file_info.engine_category)), + + maybe_animation_type: enums_convert::by_table::media_files::media_file_animation_type::media_file_animation_type_to_api(&file_info.maybe_animation_type), + maybe_mime_type: Some(file_info.mimetype), file_size_bytes: file_info.file_size_bytes as u64, maybe_duration_millis: file_info.maybe_duration_millis, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_new_scene_media_file_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_new_scene_media_file_handler.rs index bc98533343..2ea8232ff7 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_new_scene_media_file_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_new_scene_media_file_handler.rs @@ -12,8 +12,11 @@ use utoipa::ToSchema; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use enums_db::by_table::media_files::media_file_class::MediaFileClass; +use enums_api::by_table::media_files::media_file_class::MediaFileClass as ApiMediaFileClass; use enums_db::by_table::media_files::media_file_engine_category::MediaFileEngineCategory; +use enums_api::by_table::media_files::media_file_engine_category::MediaFileEngineCategory as ApiMediaFileEngineCategory; use enums_db::by_table::media_files::media_file_type::MediaFileType; +use enums_api::by_table::media_files::media_file_type::MediaFileType as ApiMediaFileType; use enums_db::common::visibility::Visibility; use hashing::sha256::sha256_hash_bytes::sha256_hash_bytes; use http_server_common::request::get_request_ip::get_request_ip; @@ -224,7 +227,8 @@ pub async fn upload_new_scene_media_file_handler( })?; let (token, record_id) = insert_media_file_from_file_upload(InsertMediaFileFromUploadArgs { - maybe_media_class: Some(MediaFileClass::Dimensional), + maybe_media_class: Some(enums_convert::by_table::media_files::media_file_class::media_file_class_to_api(&MediaFileClass::Dimensional)), + media_file_type: MediaFileType::SceneJson, maybe_creator_user_token: maybe_user_token.as_ref(), maybe_creator_anonymous_visitor_token: maybe_avt_token.as_ref(), @@ -233,7 +237,8 @@ pub async fn upload_new_scene_media_file_handler( maybe_prompt_token: None, maybe_batch_token: None, upload_type: UploadType::Filesystem, - maybe_engine_category: Some(MediaFileEngineCategory::Scene), + maybe_engine_category: Some(enums_convert::by_table::media_files::media_file_engine_category::media_file_engine_category_to_api(&MediaFileEngineCategory::Scene)), + maybe_animation_type: None, maybe_mime_type: Some(MIMETYPE), file_size_bytes: file_size_bytes as u64, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_pmx/upload_pmx_media_file_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_pmx/upload_pmx_media_file_handler.rs index bd61a66601..476b32c693 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_pmx/upload_pmx_media_file_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_pmx/upload_pmx_media_file_handler.rs @@ -11,9 +11,13 @@ use log::{error, info, warn}; use utoipa::ToSchema; use enums_db::by_table::media_files::media_file_animation_type::MediaFileAnimationType; +use enums_api::by_table::media_files::media_file_animation_type::MediaFileAnimationType as ApiMediaFileAnimationType; use enums_db::by_table::media_files::media_file_class::MediaFileClass; +use enums_api::by_table::media_files::media_file_class::MediaFileClass as ApiMediaFileClass; use enums_db::by_table::media_files::media_file_engine_category::MediaFileEngineCategory; +use enums_api::by_table::media_files::media_file_engine_category::MediaFileEngineCategory as ApiMediaFileEngineCategory; use enums_db::by_table::media_files::media_file_type::MediaFileType; +use enums_api::by_table::media_files::media_file_type::MediaFileType as ApiMediaFileType; use enums_db::common::visibility::Visibility; use http_server_common::request::get_request_ip::get_request_ip; use mysql_queries::queries::idepotency_tokens::insert_idempotency_token::insert_idempotency_token; @@ -255,14 +259,16 @@ pub async fn upload_pmx_media_file_handler( // TODO(bt, 2024-02-22): This should be a transaction. let (token, record_id) = insert_media_file_from_file_upload(InsertMediaFileFromUploadArgs { - maybe_media_class: Some(MediaFileClass::Dimensional), + maybe_media_class: Some(enums_convert::by_table::media_files::media_file_class::media_file_class_to_api(&MediaFileClass::Dimensional)), + media_file_type: MediaFileType::Pmx, maybe_creator_user_token: Some(&user_session.get_strongly_typed_user_token()), maybe_creator_anonymous_visitor_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, creator_set_visibility, upload_type: UploadType::Filesystem, - maybe_engine_category: Some(engine_category), + maybe_engine_category: Some(enums_convert::by_table::media_files::media_file_engine_category::media_file_engine_category_to_api(&engine_category)), + maybe_animation_type, maybe_prompt_token: None, maybe_batch_token: None, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_saved_scene_media_file_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_saved_scene_media_file_handler.rs index 3d898fb09b..fbfc2267ff 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_saved_scene_media_file_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_saved_scene_media_file_handler.rs @@ -11,7 +11,7 @@ use log::{error, info, warn}; use utoipa::ToSchema; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; -use enums_db::common::visibility::Visibility; +use enums_api::common::visibility::Visibility; use hashing::sha256::sha256_hash_bytes::sha256_hash_bytes; use http_server_common::request::get_request_ip::get_request_ip; use mysql_queries::queries::idepotency_tokens::insert_idempotency_token::insert_idempotency_token; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_scene_snapshot_media_file_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_scene_snapshot_media_file_handler.rs index 12605bc563..20a7f7fcfd 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_scene_snapshot_media_file_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_scene_snapshot_media_file_handler.rs @@ -12,8 +12,11 @@ use utoipa::ToSchema; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use enums_db::by_table::media_files::media_file_class::MediaFileClass; +use enums_api::by_table::media_files::media_file_class::MediaFileClass as ApiMediaFileClass; use enums_db::by_table::media_files::media_file_engine_category::MediaFileEngineCategory; +use enums_api::by_table::media_files::media_file_engine_category::MediaFileEngineCategory as ApiMediaFileEngineCategory; use enums_db::by_table::media_files::media_file_type::MediaFileType; +use enums_api::by_table::media_files::media_file_type::MediaFileType as ApiMediaFileType; use enums_db::common::visibility::Visibility; use hashing::sha256::sha256_hash_bytes::sha256_hash_bytes; use http_server_common::request::get_request_ip::get_request_ip; @@ -217,16 +220,19 @@ pub async fn upload_scene_snapshot_media_file_handler( })?; let (token, record_id) = insert_media_file_from_file_upload(InsertMediaFileFromUploadArgs { - maybe_media_class: Some(MediaFileClass::Dimensional), + maybe_media_class: Some(enums_convert::by_table::media_files::media_file_class::media_file_class_to_api(&MediaFileClass::Dimensional)), + media_file_type: MediaFileType::SceneJson, maybe_creator_user_token: maybe_user_token.as_ref(), maybe_creator_anonymous_visitor_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: Visibility::Hidden, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&Visibility::Hidden), + upload_type: UploadType::Filesystem, maybe_prompt_token: None, maybe_batch_token: None, - maybe_engine_category: Some(MediaFileEngineCategory::Scene), + maybe_engine_category: Some(enums_convert::by_table::media_files::media_file_engine_category::media_file_engine_category_to_api(&MediaFileEngineCategory::Scene)), + maybe_animation_type: None, maybe_mime_type: Some(MIMETYPE), file_size_bytes: file_size_bytes as u64, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_spz_media_file_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_spz_media_file_handler.rs index 6ce4fb5ed2..d6ff2ba18c 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_spz_media_file_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_spz_media_file_handler.rs @@ -12,8 +12,11 @@ use utoipa::ToSchema; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use enums_db::by_table::media_files::media_file_class::MediaFileClass; +use enums_api::by_table::media_files::media_file_class::MediaFileClass as ApiMediaFileClass; use enums_db::by_table::media_files::media_file_origin_category::MediaFileOriginCategory; +use enums_api::by_table::media_files::media_file_origin_category::MediaFileOriginCategory as ApiMediaFileOriginCategory; use enums_db::by_table::media_files::media_file_type::MediaFileType; +use enums_api::by_table::media_files::media_file_type::MediaFileType as ApiMediaFileType; use enums_db::common::visibility::Visibility; use hashing::sha256::sha256_hash_bytes::sha256_hash_bytes; use http_server_common::request::get_request_ip::get_request_ip; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_studio_shot/upload_studio_shot_media_file_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_studio_shot/upload_studio_shot_media_file_handler.rs index be562135bd..74670a256b 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_studio_shot/upload_studio_shot_media_file_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_studio_shot/upload_studio_shot_media_file_handler.rs @@ -12,6 +12,7 @@ use utoipa::ToSchema; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use enums_db::by_table::media_files::media_file_type::MediaFileType; +use enums_api::by_table::media_files::media_file_type::MediaFileType as ApiMediaFileType; use enums_db::common::visibility::Visibility; use filesys::file_size::file_size; use hashing::sha256::sha256_hash_file::sha256_hash_file; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_video_new/upload_new_video_media_file_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_video_new/upload_new_video_media_file_handler.rs index 601efb6c98..c9ce80d954 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_video_new/upload_new_video_media_file_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_video_new/upload_new_video_media_file_handler.rs @@ -15,7 +15,9 @@ use utoipa::ToSchema; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use enums_db::by_table::media_files::media_file_class::MediaFileClass; +use enums_api::by_table::media_files::media_file_class::MediaFileClass as ApiMediaFileClass; use enums_db::by_table::media_files::media_file_type::MediaFileType; +use enums_api::by_table::media_files::media_file_type::MediaFileType as ApiMediaFileType; use enums_db::common::visibility::Visibility; use ffmpeg_utils::ffmpeg::ffmpeg_trim_and_resample::{ffmpeg_trim_and_resample, Args}; use ffmpeg_utils::ffprobe::ffprobe_get_info::ffprobe_get_info; @@ -373,7 +375,8 @@ pub async fn upload_new_video_media_file_handler( form.is_intermediate_system_file.map(|b| b.0).unwrap_or(false); let (token, record_id) = insert_media_file_from_file_upload(InsertMediaFileFromUploadArgs { - maybe_media_class: Some(MediaFileClass::Video), + maybe_media_class: Some(enums_convert::by_table::media_files::media_file_class::media_file_class_to_api(&MediaFileClass::Video)), + media_file_type: MediaFileType::Video, maybe_creator_user_token: maybe_user_token.as_ref(), maybe_creator_anonymous_visitor_token: maybe_avt_token.as_ref(), diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_video_old/upload_video_media_file_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_video_old/upload_video_media_file_handler.rs index 9cfd5aa107..d2992ff5af 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_video_old/upload_video_media_file_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_video_old/upload_video_media_file_handler.rs @@ -9,7 +9,9 @@ use utoipa::ToSchema; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use enums_db::by_table::media_files::media_file_class::MediaFileClass; +use enums_api::by_table::media_files::media_file_class::MediaFileClass as ApiMediaFileClass; use enums_db::by_table::media_files::media_file_type::MediaFileType; +use enums_api::by_table::media_files::media_file_type::MediaFileType as ApiMediaFileType; use enums_db::common::visibility::Visibility; use hashing::sha256::sha256_hash_bytes::sha256_hash_bytes; use http_server_common::request::get_request_ip::get_request_ip; @@ -219,7 +221,8 @@ pub async fn upload_video_media_file_handler( // TODO(bt, 2024-02-22): This should be a transaction. let (token, record_id) = insert_media_file_from_file_upload(InsertMediaFileFromUploadArgs { - maybe_media_class: Some(MediaFileClass::Video), + maybe_media_class: Some(enums_convert::by_table::media_files::media_file_class::media_file_class_to_api(&MediaFileClass::Video)), + media_file_type: MediaFileType::Video, maybe_creator_user_token: maybe_user_token.as_ref(), maybe_creator_anonymous_visitor_token: maybe_avt_token.as_ref(), diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upsert_upload/write_engine_asset/write_engine_asset_media_file_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upsert_upload/write_engine_asset/write_engine_asset_media_file_handler.rs index 97002b89d8..8a3fd29ed4 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upsert_upload/write_engine_asset/write_engine_asset_media_file_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upsert_upload/write_engine_asset/write_engine_asset_media_file_handler.rs @@ -8,7 +8,9 @@ use utoipa::ToSchema; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use enums_db::by_table::media_files::media_file_class::MediaFileClass; +use enums_api::by_table::media_files::media_file_class::MediaFileClass as ApiMediaFileClass; use enums_db::by_table::media_files::media_file_type::MediaFileType; +use enums_api::by_table::media_files::media_file_type::MediaFileType as ApiMediaFileType; use enums_db::common::visibility::Visibility; use hashing::sha256::sha256_hash_bytes::sha256_hash_bytes; use http_server_common::request::get_request_ip::get_request_ip; @@ -227,7 +229,8 @@ pub async fn write_engine_asset_media_file_handler( // TODO(bt, 2024-02-22): This should be a transaction. let (token, record_id) = upsert_media_file_from_file_upload(UpsertMediaFileFromUploadArgs { maybe_media_file_token: upload_media_request.media_file_token.as_ref(), - maybe_media_class: Some(MediaFileClass::Dimensional), + maybe_media_class: Some(enums_convert::by_table::media_files::media_file_class::media_file_class_to_api(&MediaFileClass::Dimensional)), + media_file_type, maybe_engine_category: upload_media_request.maybe_engine_category, maybe_animation_type: upload_media_request.maybe_animation_type, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upsert_upload/write_scene_file/write_scene_file_media_file_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upsert_upload/write_scene_file/write_scene_file_media_file_handler.rs index 9307b5824a..72f82c1288 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upsert_upload/write_scene_file/write_scene_file_media_file_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upsert_upload/write_scene_file/write_scene_file_media_file_handler.rs @@ -8,8 +8,11 @@ use utoipa::ToSchema; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use enums_db::by_table::media_files::media_file_class::MediaFileClass; +use enums_api::by_table::media_files::media_file_class::MediaFileClass as ApiMediaFileClass; use enums_db::by_table::media_files::media_file_engine_category::MediaFileEngineCategory; +use enums_api::by_table::media_files::media_file_engine_category::MediaFileEngineCategory as ApiMediaFileEngineCategory; use enums_db::by_table::media_files::media_file_type::MediaFileType; +use enums_api::by_table::media_files::media_file_type::MediaFileType as ApiMediaFileType; use enums_db::common::visibility::Visibility; use hashing::sha256::sha256_hash_bytes::sha256_hash_bytes; use http_server_common::request::get_request_ip::get_request_ip; @@ -215,9 +218,11 @@ pub async fn write_scene_file_media_file_handler( // TODO(bt, 2024-02-22): This should be a transaction. let (token, record_id) = upsert_media_file_from_file_upload(UpsertMediaFileFromUploadArgs { maybe_media_file_token: upload_media_request.media_file_token.as_ref(), - maybe_media_class: Some(MediaFileClass::Dimensional), + maybe_media_class: Some(enums_convert::by_table::media_files::media_file_class::media_file_class_to_api(&MediaFileClass::Dimensional)), + media_file_type: MediaFileType::SceneJson, - maybe_engine_category: Some(MediaFileEngineCategory::Scene), + maybe_engine_category: Some(enums_convert::by_table::media_files::media_file_engine_category::media_file_engine_category_to_api(&MediaFileEngineCategory::Scene)), + maybe_animation_type: None, maybe_media_subtype: None, maybe_creator_user_token: maybe_user_token.as_ref(), diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/model_download/enqueue_gptsovits_model_download_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/model_download/enqueue_gptsovits_model_download_handler.rs index f1a53e8003..e29938cf45 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/model_download/enqueue_gptsovits_model_download_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/model_download/enqueue_gptsovits_model_download_handler.rs @@ -10,8 +10,11 @@ use utoipa::ToSchema; use config::bad_urls::is_bad_tts_model_download_url; use enums_db::by_table::generic_inference_jobs::inference_category::InferenceCategory; +use enums_api::by_table::generic_inference_jobs::inference_category::InferenceCategory as ApiInferenceCategory; use enums_db::by_table::generic_inference_jobs::inference_job_product_category::InferenceJobProductCategory; +use enums_api::by_table::generic_inference_jobs::inference_job_product_category::InferenceJobProductCategory as ApiInferenceJobProductCategory; use enums_db::by_table::generic_inference_jobs::inference_job_type::InferenceJobType; +use enums_api::by_table::generic_inference_jobs::inference_job_type::InferenceJobType as ApiInferenceJobType; use enums_db::common::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; @@ -168,7 +171,8 @@ pub async fn enqueue_gptsovits_model_download_handler( let query_result = insert_generic_inference_job(InsertGenericInferenceArgs { uuid_idempotency_token: &request.uuid_idempotency_token, job_type: InferenceJobType::GptSovits, - maybe_product_category: Some(InferenceJobProductCategory::DownloadGptSoVits), + maybe_product_category: Some(enums_convert::by_table::generic_inference_jobs::inference_job_product_category::inference_job_product_category_to_api(&InferenceJobProductCategory::DownloadGptSoVits)), + inference_category: InferenceCategory::DeprecatedField, maybe_model_type: None, maybe_model_token: None, @@ -184,7 +188,8 @@ pub async fn enqueue_gptsovits_model_download_handler( GptSovitsPayload { maybe_title: title.map(|s| s.to_string()), maybe_description: description.map(|s| s.to_string()), - creator_visibility: Some(creator_set_visibility), + creator_visibility: Some(enums_convert::common::visibility::visibility_to_db(&creator_set_visibility)), + // Inference only args: append_advertisement: None, }) diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/jobs/user/list_user_jobs_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/jobs/user/list_user_jobs_handler.rs index b687f87a12..4d70e14627 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/jobs/user/list_user_jobs_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/jobs/user/list_user_jobs_handler.rs @@ -48,14 +48,16 @@ pub async fn list_user_jobs_handler( })?; let jobs = results.into_iter().map(|row| ListUserJobsEntry { - job_status: row.job_status, + job_status: enums_convert::common::job_status_plus::job_status_plus_to_api(&row.job_status), + job_failure_reason: row.job_failure_reason, credits_delta: row.credits_delta, maybe_linked_refund_ledger_token: row.maybe_linked_refund_ledger_token, on_success_result_media_token: row.on_success_result_media_token, job_token: row.job_token, wallet_ledger_entry_token: row.wallet_ledger_entry_token, - wallet_ledger_entry_type: row.wallet_ledger_entry_type, + wallet_ledger_entry_type: enums_convert::by_table::wallet_ledger_entries::wallet_ledger_entry_type::wallet_ledger_entry_type_to_api(&row.wallet_ledger_entry_type), + }).collect(); Ok(Json(ListUserJobsResponse { diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user/moderator_user_lookup_by_stripe_customer_id_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user/moderator_user_lookup_by_stripe_customer_id_handler.rs index 919ba65c0b..c673f8479a 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user/moderator_user_lookup_by_stripe_customer_id_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user/moderator_user_lookup_by_stripe_customer_id_handler.rs @@ -54,7 +54,8 @@ pub async fn moderator_user_lookup_by_stripe_customer_id_handler( })?; let users = results.into_iter().map(|row| ModeratorUserLookupByStripeCustomerIdEntry { - subscription_namespace: row.subscription_namespace, + subscription_namespace: enums_convert::common::payments_namespace::payments_namespace_to_api(&row.subscription_namespace), + maybe_stripe_subscription_id: row.maybe_stripe_subscription_id, token: row.user_token, email_address: row.email_address, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_feature_flags/edit_user_feature_flags_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_feature_flags/edit_user_feature_flags_handler.rs index 17d9dd34d3..c48bdff441 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_feature_flags/edit_user_feature_flags_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_feature_flags/edit_user_feature_flags_handler.rs @@ -12,6 +12,7 @@ use redis::{Client, Commands}; use utoipa::ToSchema; use enums_db::by_table::users::user_feature_flag::UserFeatureFlag; +use enums_api::by_table::users::user_feature_flag::UserFeatureFlag as ApiUserFeatureFlag; use http_server_common::request::get_request_ip::get_request_ip; use mysql_queries::queries::users::user::get::get_user_token_by_username::get_user_token_by_username; use mysql_queries::queries::users::user::update::set_user_feature_flags::{set_user_feature_flags, SetUserFeatureFlagArgs}; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/wallet_ledger_entries/list_wallet_ledger_entries_by_wallet_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/wallet_ledger_entries/list_wallet_ledger_entries_by_wallet_handler.rs index 98bb950ff5..ea4c2553bc 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/wallet_ledger_entries/list_wallet_ledger_entries_by_wallet_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/wallet_ledger_entries/list_wallet_ledger_entries_by_wallet_handler.rs @@ -50,7 +50,8 @@ pub async fn list_wallet_ledger_entries_by_wallet_handler( let entries = results.into_iter().map(|row| ListWalletLedgerEntriesByWalletEntry { token: row.token, wallet_token: row.wallet_token, - entry_type: row.entry_type, + entry_type: enums_convert::by_table::wallet_ledger_entries::wallet_ledger_entry_type::wallet_ledger_entry_type_to_api(&row.entry_type), + maybe_entity_ref: row.maybe_entity_ref, credits_delta: row.credits_delta, banked_credits_before: row.banked_credits_before, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/wallet_ledger_entries/moderator_get_wallet_ledger_entry_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/wallet_ledger_entries/moderator_get_wallet_ledger_entry_handler.rs index 50debe1d08..7df6f52326 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/wallet_ledger_entries/moderator_get_wallet_ledger_entry_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/wallet_ledger_entries/moderator_get_wallet_ledger_entry_handler.rs @@ -49,7 +49,8 @@ pub async fn moderator_get_wallet_ledger_entry_handler( let maybe_entry_details = maybe_entry.map(|entry| ModeratorGetWalletLedgerEntryDetails { token: entry.token, - entry_type: entry.entry_type, + entry_type: enums_convert::by_table::wallet_ledger_entries::wallet_ledger_entry_type::wallet_ledger_entry_type_to_api(&entry.entry_type), + maybe_entity_ref: entry.maybe_entity_ref, credits_delta: entry.credits_delta, banked_credits_before: entry.banked_credits_before, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/wallets/list_user_wallets_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/wallets/list_user_wallets_handler.rs index bf787701d9..57bac5e52c 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/wallets/list_user_wallets_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/wallets/list_user_wallets_handler.rs @@ -49,7 +49,8 @@ pub async fn list_user_wallets_handler( let wallets = results.into_iter().map(|row| ListUserWalletsEntry { token: row.token, - wallet_namespace: row.wallet_namespace, + wallet_namespace: enums_convert::common::payments_namespace::payments_namespace_to_api(&row.wallet_namespace), + banked_credits: row.banked_credits, monthly_credits: row.monthly_credits, version: row.version, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/wallets/moderator_create_wallet_for_user_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/wallets/moderator_create_wallet_for_user_handler.rs index f387a75f3d..4fdfdd68c3 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/wallets/moderator_create_wallet_for_user_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/wallets/moderator_create_wallet_for_user_handler.rs @@ -2,7 +2,7 @@ use std::sync::Arc; use actix_web::web::Json; use actix_web::{web, HttpRequest}; -use enums_db::common::payments_namespace::PaymentsNamespace; +use enums_api::common::payments_namespace::PaymentsNamespace; use log::{error, warn}; use sqlx::Acquire; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/wallets/moderator_get_wallet_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/wallets/moderator_get_wallet_handler.rs index 51ac688e97..0d7a29b1ee 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/wallets/moderator_get_wallet_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/wallets/moderator_get_wallet_handler.rs @@ -49,7 +49,8 @@ pub async fn moderator_get_wallet_handler( let maybe_wallet_details = maybe_wallet.map(|wallet| ModeratorGetWalletDetails { token: wallet.token, - wallet_namespace: wallet.wallet_namespace, + wallet_namespace: enums_convert::common::payments_namespace::payments_namespace_to_api(&wallet.wallet_namespace), + owner_user_token: wallet.owner_user_token, banked_credits: wallet.banked_credits, monthly_credits: wallet.monthly_credits, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/prompts/create_prompt_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/prompts/create_prompt_handler.rs index 2e9e414eed..fa4d05a9d2 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/prompts/create_prompt_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/prompts/create_prompt_handler.rs @@ -10,7 +10,7 @@ use crate::state::server_state::ServerState; use actix_web::web::Json; use actix_web::{web, HttpRequest}; use artcraft_api_defs::prompts::create_prompt::{CreatePromptRequest, CreatePromptResponse}; -use enums_db::by_table::prompts::prompt_type::PromptType; +use enums_api::by_table::prompts::prompt_type::PromptType; use http_server_common::request::get_request_ip::get_request_ip; use log::{error, warn}; use mysql_queries::queries::idepotency_tokens::insert_idempotency_token::insert_idempotency_token; @@ -71,12 +71,15 @@ pub async fn create_prompt_handler( let result = insert_prompt(InsertPromptArgs { maybe_apriori_prompt_token: None, - prompt_type: PromptType::ArtcraftApp, + prompt_type: enums_convert::by_table::prompts::prompt_type::prompt_type_to_api(&PromptType::ArtcraftApp), + maybe_creator_user_token: maybe_user_session .as_ref() .map(|s| &s.user_token), - maybe_model_type: request.model_type, - maybe_generation_provider: request.generation_provider, + maybe_model_type: enums_convert::common::model_type::model_type_to_db(&request.model_type), + + maybe_generation_provider: enums_convert::common::generation::generation_provider::generation_provider_to_api(&request.generation_provider), + maybe_positive_prompt, maybe_negative_prompt, maybe_other_args: None, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/prompts/get_prompt_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/prompts/get_prompt_handler.rs index 23780e99d6..233365734f 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/prompts/get_prompt_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/prompts/get_prompt_handler.rs @@ -13,10 +13,15 @@ use artcraft_api_defs::common::responses::media_links::MediaLinks; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use chrono::{DateTime, Utc}; use enums_db::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType; +use enums_api::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType as ApiPromptContextSemanticType; use enums_db::by_table::prompts::prompt_type::PromptType; +use enums_api::by_table::prompts::prompt_type::PromptType as ApiPromptType; use enums_db::common::generation::generation_provider::GenerationProvider; +use enums_api::common::generation::generation_provider::GenerationProvider as ApiGenerationProvider; use enums_db::common::model_type::ModelType; +use enums_api::common::model_type::ModelType as ApiModelType; use enums_db::no_table::style_transfer::style_transfer_name::StyleTransferName; +use enums_api::no_table::style_transfer::style_transfer_name::StyleTransferName as ApiStyleTransferName; use log::{error, warn}; use mysql_queries::queries::prompt_context_items::list_prompt_context_items::list_prompt_context_items; use mysql_queries::queries::prompts::get_prompt::{get_prompt, get_prompt_from_connection}; @@ -39,7 +44,7 @@ pub struct GetPromptSuccessResponse { #[derive(Serialize, ToSchema)] pub struct GetPromptImageContextItem { pub media_token: MediaFileToken, - pub semantic: PromptContextSemanticType, + pub semantic: ApiPromptContextSemanticType, pub media_links: MediaLinks, } @@ -49,13 +54,13 @@ pub struct PromptInfo { /// The type of prompt. /// Note: Prompts may or may not be compatible across systems. - pub prompt_type: PromptType, + pub prompt_type: ApiPromptType, /// The type of model used - pub maybe_model_type: Option, + pub maybe_model_type: Option, /// The service provider used - pub maybe_generation_provider: Option, + pub maybe_generation_provider: Option, /// Positive prompt (technically optional, but usually present) pub maybe_positive_prompt: Option, @@ -72,7 +77,7 @@ pub struct PromptInfo { /// If a "style" was used, this is the name of it. /// This might not be present for all types of inference /// and typically only applies to video style transfer. - pub maybe_style_name: Option, + pub maybe_style_name: Option, /// How many milliseconds it took to run generation. pub maybe_inference_duration_millis: Option, @@ -292,11 +297,17 @@ pub async fn get_prompt_handler( let items = items.iter().filter_map(|item| { match item.context_semantic_type { PromptContextSemanticType::VidStartFrame => {}, + PromptContextSemanticType::VidEndFrame => {}, + PromptContextSemanticType::Imgref => {}, + PromptContextSemanticType::ImgrefCharacter => {}, + PromptContextSemanticType::ImgrefStyle => {}, + PromptContextSemanticType::ImgrefBg => {}, + _ => { // NB: Only return images. In the future we may add context items for stages, persisted data, etc. return None @@ -310,7 +321,8 @@ pub async fn get_prompt_handler( Some(GetPromptImageContextItem { media_token: item.media_token.clone(), - semantic: item.context_semantic_type, + semantic: enums_convert::by_table::prompt_context_items::prompt_context_semantic_type::prompt_context_semantic_type_to_api(&item.context_semantic_type), + media_links: MediaLinksBuilder::from_media_path_and_env( media_domain, server_state.server_environment, @@ -331,7 +343,8 @@ pub async fn get_prompt_handler( token: result.token, maybe_strength, maybe_model_type: result.maybe_model_type, - maybe_generation_provider: result.maybe_generation_provider, + maybe_generation_provider: enums_convert::common::generation::generation_provider::generation_provider_to_api(&result.maybe_generation_provider), + maybe_positive_prompt: result.maybe_positive_prompt, maybe_negative_prompt: result.maybe_negative_prompt, maybe_context_images, @@ -343,7 +356,8 @@ pub async fn get_prompt_handler( lipsync_enabled, lcm_disabled, use_cinematic, - prompt_type: result.prompt_type, + prompt_type: enums_convert::by_table::prompts::prompt_type::prompt_type_to_api(&result.prompt_type), + created_at: result.created_at, maybe_moderator_fields, maybe_global_ipa_image_token, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/studio_gen2/enqueue_studio_gen2_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/studio_gen2/enqueue_studio_gen2_handler.rs index 857114ef49..0f3c953012 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/studio_gen2/enqueue_studio_gen2_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/studio_gen2/enqueue_studio_gen2_handler.rs @@ -13,7 +13,9 @@ use log::{error, info, warn}; use utoipa::ToSchema; use enums_db::by_table::generic_inference_jobs::inference_category::InferenceCategory; +use enums_api::by_table::generic_inference_jobs::inference_category::InferenceCategory as ApiInferenceCategory; use enums_db::by_table::generic_inference_jobs::inference_job_type::InferenceJobType; +use enums_api::by_table::generic_inference_jobs::inference_job_type::InferenceJobType as ApiInferenceJobType; use enums_db::common::visibility::Visibility; use http_server_common::request::get_request_ip::get_request_ip; use mysql_queries::payloads::generic_inference_args::common::watermark_type::WatermarkType; @@ -268,7 +270,8 @@ pub async fn enqueue_studio_gen2_handler( let inference_args = StudioGen2Payload { image_file: Some(request.image_file.clone()), video_file: Some(request.video_file.clone()), - creator_visibility: Some(set_visibility), + creator_visibility: Some(enums_convert::common::visibility::visibility_to_db(&set_visibility)), + watermark_type, after_job_debug_sleep_millis: request.debug_sleep_millis, output_width: request.output_width, @@ -304,7 +307,8 @@ pub async fn enqueue_studio_gen2_handler( maybe_creator_user_token: maybe_user_token.as_ref(), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: set_visibility, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&set_visibility), + priority_level, requires_keepalive: false, is_debug_request, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/subscriptions/get_session_subscription_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/subscriptions/get_session_subscription_handler.rs index 8d1e372c14..d4f0e6fc60 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/subscriptions/get_session_subscription_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/subscriptions/get_session_subscription_handler.rs @@ -9,7 +9,7 @@ use actix_web::{web, HttpMessage, HttpRequest, HttpResponse}; use artcraft_api_defs::credits::get_session_credits::GetSessionCreditsResponse; use artcraft_api_defs::subscriptions::get_session_subscription::{GetSessionSubscriptionResponse, SubscriptionInfo}; use chrono::{DateTime, Utc}; -use enums_db::common::payments_namespace::PaymentsNamespace; +use enums_api::common::payments_namespace::PaymentsNamespace; use log::{error, warn}; use mysql_queries::queries::users::user_subscriptions::find_subscription_for_owner_user::find_subscription_for_owner_user_using_connection; use tokens::tokens::media_files::MediaFileToken; @@ -70,7 +70,8 @@ pub async fn get_session_subscription_handler( let maybe_subscription = find_subscription_for_owner_user_using_connection( &user_token, - path.namespace, + enums_convert::common::payments_namespace::payments_namespace_to_api(&path.namespace), + &mut mysql_connection ).await.map_err(|err| { error!("Error looking up user's ({}) existing subscription: {:?}", &user_token, err); @@ -111,7 +112,8 @@ pub async fn get_session_subscription_handler( //} SubscriptionInfo { - namespace: sub.subscription_namespace, + namespace: enums_convert::common::payments_namespace::payments_namespace_to_api(&sub.subscription_namespace), + product_slug: sub.subscription_product_slug, subscription_token: sub.token, next_bill_at: next_bill_date, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/tags/list_tags_for_entity_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/tags/list_tags_for_entity_handler.rs index 9c489da540..56d72c75b5 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/tags/list_tags_for_entity_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/tags/list_tags_for_entity_handler.rs @@ -15,6 +15,7 @@ use actix_web::web::{Json, Path}; use actix_web::{web, HttpRequest, HttpResponse}; use composite_identifiers::by_table::tag_uses::tag_use_entity::TagUseEntity; use enums_db::by_table::tag_uses::tag_use_entity_type::TagUseEntityType; +use enums_api::by_table::tag_uses::tag_use_entity_type::TagUseEntityType as ApiTagUseEntityType; use log::warn; use mysql_queries::queries::tags::list_tags_for_entity::list_tags_for_entity; use mysql_queries::utils::transactor::Transactor; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/tags/set_tags_for_entity_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/tags/set_tags_for_entity_handler.rs index c24918e76a..9df20879bc 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/tags/set_tags_for_entity_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/tags/set_tags_for_entity_handler.rs @@ -16,6 +16,7 @@ use actix_web::web::{Data, Json, Path}; use actix_web::{HttpRequest, HttpResponse}; use composite_identifiers::by_table::tag_uses::tag_use_entity::TagUseEntity; use enums_db::by_table::tag_uses::tag_use_entity_type::TagUseEntityType; +use enums_api::by_table::tag_uses::tag_use_entity_type::TagUseEntityType as ApiTagUseEntityType; use log::warn; use mysql_queries::queries::media_files::get::get_media_file::get_media_file_with_transactor; use mysql_queries::queries::model_weights::get::get_weight::get_weight_by_token_with_transactor; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/tts/enqueue_infer_f5_tts_handler/enqueue_infer_f5_tts_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/tts/enqueue_infer_f5_tts_handler/enqueue_infer_f5_tts_handler.rs index 06d3f791e9..f612fafd7d 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/tts/enqueue_infer_f5_tts_handler/enqueue_infer_f5_tts_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/tts/enqueue_infer_f5_tts_handler/enqueue_infer_f5_tts_handler.rs @@ -16,9 +16,13 @@ use rand::Rng; use utoipa::ToSchema; use enums_db::by_table::generic_inference_jobs::inference_category::InferenceCategory; +use enums_api::by_table::generic_inference_jobs::inference_category::InferenceCategory as ApiInferenceCategory; use enums_db::by_table::generic_inference_jobs::inference_input_source_token_type::InferenceInputSourceTokenType; +use enums_api::by_table::generic_inference_jobs::inference_input_source_token_type::InferenceInputSourceTokenType as ApiInferenceInputSourceTokenType; use enums_db::by_table::generic_inference_jobs::inference_job_product_category::InferenceJobProductCategory; +use enums_api::by_table::generic_inference_jobs::inference_job_product_category::InferenceJobProductCategory as ApiInferenceJobProductCategory; use enums_db::by_table::generic_inference_jobs::inference_job_type::InferenceJobType; +use enums_api::by_table::generic_inference_jobs::inference_job_type::InferenceJobType as ApiInferenceJobType; use enums_db::common::visibility::Visibility; use http_server_common::request::get_request_api_token::get_request_api_token; use http_server_common::request::get_request_header_optional::get_request_header_optional; @@ -370,7 +374,8 @@ pub async fn enqueue_infer_f5_tts_handler( maybe_model_type, maybe_model_token: None, maybe_input_source_token: Some(&media_token), - maybe_input_source_token_type: Some(media_token_type), + maybe_input_source_token_type: Some(enums_convert::by_table::generic_inference_jobs::inference_input_source_token_type::inference_input_source_token_type_to_api(&media_token_type)), + maybe_download_url: None, maybe_cover_image_media_file_token: None, maybe_raw_inference_text: Some(inference_text.as_str()), @@ -379,7 +384,8 @@ pub async fn enqueue_infer_f5_tts_handler( maybe_creator_user_token: maybe_creator_user_token_typed.as_ref(), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: set_visibility, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&set_visibility), + priority_level, requires_keepalive: false, // TODO: We may want this to be the case in the future. is_debug_request, @@ -480,8 +486,11 @@ async fn check_if_authorized_to_use_model( match tts_model.creator_set_visibility() { Visibility::Public => return true, + Visibility::Hidden => return true, + Visibility::Private => {} // Fall through + } let is_authorized = maybe_user_session diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/tts/enqueue_infer_tts_handler/enqueue_infer_tts_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/tts/enqueue_infer_tts_handler/enqueue_infer_tts_handler.rs index bc8f70a005..8f0703763b 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/tts/enqueue_infer_tts_handler/enqueue_infer_tts_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/tts/enqueue_infer_tts_handler/enqueue_infer_tts_handler.rs @@ -17,9 +17,13 @@ use redis::Commands; use utoipa::ToSchema; use enums_db::by_table::generic_inference_jobs::inference_category::InferenceCategory; +use enums_api::by_table::generic_inference_jobs::inference_category::InferenceCategory as ApiInferenceCategory; use enums_db::by_table::generic_inference_jobs::inference_job_product_category::InferenceJobProductCategory; +use enums_api::by_table::generic_inference_jobs::inference_job_product_category::InferenceJobProductCategory as ApiInferenceJobProductCategory; use enums_db::by_table::generic_inference_jobs::inference_job_type::InferenceJobType; +use enums_api::by_table::generic_inference_jobs::inference_job_type::InferenceJobType as ApiInferenceJobType; use enums_db::by_table::generic_inference_jobs::inference_model_type::InferenceModelType; +use enums_api::by_table::generic_inference_jobs::inference_model_type::InferenceModelType as ApiInferenceModelType; use enums_db::common::visibility::Visibility; use http_server_common::request::get_request_api_token::get_request_api_token; use http_server_common::request::get_request_header_optional::get_request_header_optional; @@ -405,15 +409,18 @@ pub async fn enqueue_infer_tts_handler( let maybe_model_type = match tts_model.job_type() { InferenceJobType::GptSovits => None, // TODO(bt,2024-08-07): why don't we set this? + _ => Some(InferenceModelType::Tacotron2) }; let maybe_inference_args = match tts_model.job_type() { InferenceJobType::Tacotron2 => Some(GenericInferenceArgs { + inference_category: Some(InferenceCategoryAbbreviated::TextToSpeech), args: None, // NB: We don't need to encode any args yet for TT2. }), InferenceJobType::GptSovits => Some(GenericInferenceArgs { + inference_category: Some(InferenceCategoryAbbreviated::GptSovits), args: Some(PolymorphicInferenceArgs::Gs(GptSovitsPayload { append_advertisement: None, @@ -449,7 +456,8 @@ pub async fn enqueue_infer_tts_handler( maybe_creator_user_token: maybe_creator_user_token_typed.as_ref(), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: set_visibility, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&set_visibility), + priority_level, requires_keepalive: false, // TODO: We may want this to be the case in the future. is_debug_request, @@ -557,8 +565,11 @@ async fn check_if_authorized_to_use_model( match tts_model.creator_set_visibility() { Visibility::Public => return true, + Visibility::Hidden => return true, + Visibility::Private => {} // Fall through + } let is_authorized = maybe_user_session diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/user_bookmarks/batch_get_user_bookmarks_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/user_bookmarks/batch_get_user_bookmarks_handler.rs index 4ccaf3b102..31fa80bdf9 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/user_bookmarks/batch_get_user_bookmarks_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/user_bookmarks/batch_get_user_bookmarks_handler.rs @@ -7,7 +7,7 @@ use actix_web_lab::extract::Query; use log::error; use utoipa::{IntoParams, ToSchema}; -use enums_db::by_table::user_bookmarks::user_bookmark_entity_type::UserBookmarkEntityType; +use enums_api::by_table::user_bookmarks::user_bookmark_entity_type::UserBookmarkEntityType; use http_server_common::response::serialize_as_json_error::serialize_as_json_error; use mysql_queries::queries::users::user_bookmarks::batch_get_user_bookmarks::{batch_get_user_bookmarks, BatchUserBookmark}; use tokens::tokens::media_files::MediaFileToken; @@ -178,7 +178,8 @@ fn fill_in_missed_bookmarks(request_tokens: &HashSet, db_response: Vec { + maybe_media_file_cover = Some(MediaFileCoverImageDetails::from_optional_db_fields( &MediaFileToken::new_from_str(&user_bookmark.entity_token), media_domain, @@ -250,6 +259,7 @@ pub async fn list_user_bookmarks_for_user_handler( )); } UserBookmarkEntityType::ModelWeight => { + maybe_model_weight_cover = Some(WeightsCoverImageDetails::from_optional_db_fields( media_domain, server_state.server_environment, @@ -291,14 +301,17 @@ pub async fn list_user_bookmarks_for_user_handler( UserBookmarkListItem { token: user_bookmark.token, details: UserBookmarkDetailsForUserList { - entity_type: user_bookmark.entity_type, + entity_type: enums_convert::by_table::user_bookmarks::user_bookmark_entity_type::user_bookmark_entity_type_to_api(&user_bookmark.entity_type), + entity_token: user_bookmark.entity_token, maybe_media_file_data: match user_bookmark.entity_type { UserBookmarkEntityType::MediaFile => + match (maybe_media_file_bucket_path, maybe_media_file_media_links, maybe_media_file_cover) { (Some(path), Some(links), Some(cover)) => Some(MediaFileData { // TODO(bt,2023-12-28): Proper default, optional, or "unknown" values would be better. - media_type: user_bookmark.maybe_media_file_type.unwrap_or(MediaFileType::Image), + media_type: enums_convert::by_table::media_files::media_file_type::media_file_type_to_api(&user_bookmark.maybe_media_file_type.unwrap_or(MediaFileType::Image)), + media_links: links, cover, public_bucket_path: path.get_full_object_path_str().to_string(), @@ -310,12 +323,15 @@ pub async fn list_user_bookmarks_for_user_handler( }, maybe_weight_data: match user_bookmark.entity_type { UserBookmarkEntityType::ModelWeight => + match maybe_model_weight_cover { Some(cover) => Some(WeightsData { // TODO(bt,2023-12-28): Proper default, optional, or "unknown" values would be better. title: user_bookmark.maybe_entity_descriptive_text.clone().unwrap_or_else(|| "weight".to_string()), - weight_type: PublicWeightsType::from_enum(user_bookmark.maybe_model_weight_type.unwrap_or(WeightsType::Tacotron2)), - weight_category: user_bookmark.maybe_model_weight_category.unwrap_or(WeightsCategory::TextToSpeech), + weight_type: enums_convert::by_table::model_weights::weights_types::weights_type_to_api(&PublicWeightsType::from_enum(user_bookmark.maybe_model_weight_type.unwrap_or(WeightsType::Tacotron2))), + + weight_category: enums_convert::by_table::model_weights::weights_category::weights_category_to_api(&user_bookmark.maybe_model_weight_category.unwrap_or(WeightsCategory::TextToSpeech)), + cover, maybe_cover_image_public_bucket_path: maybe_model_weight_cover_image, maybe_creator: maybe_model_weight_creator, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/user_ratings/batch_get_user_rating_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/user_ratings/batch_get_user_rating_handler.rs index 82b78f2404..7e51c34d26 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/user_ratings/batch_get_user_rating_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/user_ratings/batch_get_user_rating_handler.rs @@ -7,8 +7,8 @@ use actix_web_lab::extract::Query; use log::error; use utoipa::{IntoParams, ToSchema}; -use enums_db::by_table::user_ratings::entity_type::UserRatingEntityType; -use enums_db::by_table::user_ratings::rating_value::UserRatingValue; +use enums_api::by_table::user_ratings::entity_type::UserRatingEntityType; +use enums_api::by_table::user_ratings::rating_value::UserRatingValue; use http_server_common::response::serialize_as_json_error::serialize_as_json_error; use mysql_queries::queries::users::user_ratings::batch_get_user_rating::{batch_get_user_ratings, BatchUserRating}; use tokens::tokens::media_files::MediaFileToken; @@ -169,8 +169,10 @@ fn fill_in_missed_ratings(request_tokens: &HashSet, db_response: Vec, + pub signup_source: Option, /// Optional: The referral URL the user arrived from when signing up. /// The browser can send `document.referrer` to the backend so we know how people are finding us. diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/users/get_profile_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/users/get_profile_handler.rs index 0ec4590585..99f6f01aee 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/users/get_profile_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/users/get_profile_handler.rs @@ -18,6 +18,7 @@ use sqlx::MySqlPool; use utoipa::ToSchema; use enums_db::by_table::users::user_feature_flag::UserFeatureFlag; +use enums_api::by_table::users::user_feature_flag::UserFeatureFlag as ApiUserFeatureFlag; use enums_db::common::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; @@ -268,8 +269,10 @@ pub async fn get_profile_handler( profile_rendered_html: user_data.user_profile.profile_rendered_html, user_role_slug: user_data.user_profile.user_role_slug, disable_gravatar: user_data.user_profile.disable_gravatar, - preferred_tts_result_visibility: user_data.user_profile.preferred_tts_result_visibility, - preferred_w2l_result_visibility: user_data.user_profile.preferred_w2l_result_visibility, + preferred_tts_result_visibility: enums_convert::common::visibility::visibility_to_api(&user_data.user_profile.preferred_tts_result_visibility), + + preferred_w2l_result_visibility: enums_convert::common::visibility::visibility_to_api(&user_data.user_profile.preferred_w2l_result_visibility), + discord_username: user_data.user_profile.discord_username, twitch_username: user_data.user_profile.twitch_username, twitter_username: user_data.user_profile.twitter_username, @@ -286,7 +289,8 @@ pub async fn get_profile_handler( is_banned: mod_fields.is_banned, maybe_mod_comments: mod_fields.maybe_mod_comments, maybe_mod_user_token: mod_fields.maybe_mod_user_token, - maybe_feature_flags: feature_flags.clone_flags(), + maybe_feature_flags: enums_convert::by_table::users::user_feature_flag::user_feature_flag_to_api(&feature_flags.clone_flags()), + } }), badges: user_data.badges diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/users/session_info_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/users/session_info_handler.rs index 9cffac196f..9471033ad9 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/users/session_info_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/users/session_info_handler.rs @@ -14,6 +14,7 @@ use utoipa::ToSchema; use artcraft_api_defs::users::session_info::{FakeYouPlan, SessionInfoSuccessResponse, SessionOnboardingState, SessionUserInfo, StorytellerStreamPlan}; use enums_db::by_table::users::user_feature_flag::UserFeatureFlag; +use enums_api::by_table::users::user_feature_flag::UserFeatureFlag as ApiUserFeatureFlag; use http_server_common::response::response_error_helpers::to_simple_json_error; use crate::http_server::common_responses::user_details_lite_builder::UserDetailsLightBuilder; @@ -112,8 +113,10 @@ pub async fn session_info_handler( email_gravatar_hash: session_data.email_gravatar_hash.to_string(), // Rollout / feature flags: - can_access_studio: feature_flags.has_flag(UserFeatureFlag::Studio), - maybe_feature_flags: feature_flags.clone_flags(), + can_access_studio: enums_convert::by_table::users::user_feature_flag::user_feature_flag_to_api(&feature_flags.has_flag(UserFeatureFlag::Studio)), + + maybe_feature_flags: enums_convert::by_table::users::user_feature_flag::user_feature_flag_to_api(&feature_flags.clone_flags()), + // Premium plans: fakeyou_plan: FakeYouPlan::Free, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/voice_conversion/enqueue_seed_vc_inference_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/voice_conversion/enqueue_seed_vc_inference_handler.rs index 8236787389..86c3d658de 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/voice_conversion/enqueue_seed_vc_inference_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/voice_conversion/enqueue_seed_vc_inference_handler.rs @@ -14,9 +14,13 @@ use log::{info, warn}; use utoipa::ToSchema; use enums_db::by_table::generic_inference_jobs::inference_category::InferenceCategory; +use enums_api::by_table::generic_inference_jobs::inference_category::InferenceCategory as ApiInferenceCategory; use enums_db::by_table::generic_inference_jobs::inference_input_source_token_type::InferenceInputSourceTokenType; +use enums_api::by_table::generic_inference_jobs::inference_input_source_token_type::InferenceInputSourceTokenType as ApiInferenceInputSourceTokenType; use enums_db::by_table::generic_inference_jobs::inference_job_product_category::InferenceJobProductCategory; +use enums_api::by_table::generic_inference_jobs::inference_job_product_category::InferenceJobProductCategory as ApiInferenceJobProductCategory; use enums_db::by_table::generic_inference_jobs::inference_job_type::InferenceJobType; +use enums_api::by_table::generic_inference_jobs::inference_job_type::InferenceJobType as ApiInferenceJobType; use enums_db::common::visibility::Visibility; use http_server_common::request::get_request_api_token::get_request_api_token; use http_server_common::request::get_request_header_optional::get_request_header_optional; @@ -315,7 +319,8 @@ pub async fn enqueue_infer_seed_vc_handler( maybe_model_type, maybe_model_token: None, maybe_input_source_token: Some(&source_media_token), - maybe_input_source_token_type: Some(source_media_token_type), + maybe_input_source_token_type: Some(enums_convert::by_table::generic_inference_jobs::inference_input_source_token_type::inference_input_source_token_type_to_api(&source_media_token_type)), + maybe_download_url: None, maybe_cover_image_media_file_token: None, maybe_raw_inference_text: None, @@ -324,7 +329,8 @@ pub async fn enqueue_infer_seed_vc_handler( maybe_creator_user_token: maybe_creator_user_token_typed.as_ref(), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: set_visibility, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&set_visibility), + priority_level, requires_keepalive: false, // TODO: We may want this to be the case in the future. is_debug_request, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/voice_conversion/enqueue_voice_conversion_inference_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/voice_conversion/enqueue_voice_conversion_inference_handler.rs index 44da29d168..73d758cbf8 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/voice_conversion/enqueue_voice_conversion_inference_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/voice_conversion/enqueue_voice_conversion_inference_handler.rs @@ -17,10 +17,15 @@ use sqlx::MySql; use utoipa::ToSchema; use enums_db::by_table::generic_inference_jobs::inference_category::InferenceCategory; +use enums_api::by_table::generic_inference_jobs::inference_category::InferenceCategory as ApiInferenceCategory; use enums_db::by_table::generic_inference_jobs::inference_input_source_token_type::InferenceInputSourceTokenType; +use enums_api::by_table::generic_inference_jobs::inference_input_source_token_type::InferenceInputSourceTokenType as ApiInferenceInputSourceTokenType; use enums_db::by_table::generic_inference_jobs::inference_job_product_category::InferenceJobProductCategory; +use enums_api::by_table::generic_inference_jobs::inference_job_product_category::InferenceJobProductCategory as ApiInferenceJobProductCategory; use enums_db::by_table::generic_inference_jobs::inference_job_type::InferenceJobType; +use enums_api::by_table::generic_inference_jobs::inference_job_type::InferenceJobType as ApiInferenceJobType; use enums_db::by_table::generic_inference_jobs::inference_model_type::InferenceModelType; +use enums_api::by_table::generic_inference_jobs::inference_model_type::InferenceModelType as ApiInferenceModelType; use enums_db::common::visibility::Visibility; use http_server_common::request::get_request_header_optional::get_request_header_optional; use http_server_common::request::get_request_ip::get_request_ip; @@ -358,7 +363,8 @@ pub async fn enqueue_voice_conversion_inference_handler( maybe_model_type: Some(model_inference_info.job_model_type), maybe_model_token: Some(&model_token), maybe_input_source_token: Some(&media_token), - maybe_input_source_token_type: Some(media_token_type), + maybe_input_source_token_type: Some(enums_convert::by_table::generic_inference_jobs::inference_input_source_token_type::inference_input_source_token_type_to_api(&media_token_type)), + maybe_download_url: None, maybe_cover_image_media_file_token: None, maybe_raw_inference_text: None, // NB: Voice conversion isn't TTS, so there's no text. @@ -370,7 +376,8 @@ pub async fn enqueue_voice_conversion_inference_handler( maybe_creator_user_token: maybe_user_token.as_ref(), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: set_visibility, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&set_visibility), + priority_level, requires_keepalive: plan.web_vc_requires_frontend_keepalive(), is_debug_request, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/voice_designer/inference/enqueue_tts_request.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/voice_designer/inference/enqueue_tts_request.rs index 979a4b3538..0b5ecf46fe 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/voice_designer/inference/enqueue_tts_request.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/voice_designer/inference/enqueue_tts_request.rs @@ -14,9 +14,13 @@ use serde::Serialize; use utoipa::ToSchema; use enums_db::by_table::generic_inference_jobs::inference_category::InferenceCategory; +use enums_api::by_table::generic_inference_jobs::inference_category::InferenceCategory as ApiInferenceCategory; use enums_db::by_table::generic_inference_jobs::inference_job_product_category::InferenceJobProductCategory; +use enums_api::by_table::generic_inference_jobs::inference_job_product_category::InferenceJobProductCategory as ApiInferenceJobProductCategory; use enums_db::by_table::generic_inference_jobs::inference_job_type::InferenceJobType; +use enums_api::by_table::generic_inference_jobs::inference_job_type::InferenceJobType as ApiInferenceJobType; use enums_db::by_table::generic_inference_jobs::inference_model_type::InferenceModelType; +use enums_api::by_table::generic_inference_jobs::inference_model_type::InferenceModelType as ApiInferenceModelType; use enums_db::common::visibility::Visibility; use http_server_common::request::get_request_header_optional::get_request_header_optional; use http_server_common::request::get_request_ip::get_request_ip; @@ -193,7 +197,8 @@ pub async fn enqueue_tts_request( let query_result = insert_generic_inference_job(InsertGenericInferenceArgs { uuid_idempotency_token: &request.uuid_idempotency_token, job_type: InferenceJobType::StyleTTS2, - maybe_product_category: Some(InferenceJobProductCategory::TtsStyleTts2), + maybe_product_category: Some(enums_convert::by_table::generic_inference_jobs::inference_job_product_category::inference_job_product_category_to_api(&InferenceJobProductCategory::TtsStyleTts2)), + inference_category: InferenceCategory::TextToSpeech, maybe_model_type: Some(InferenceModelType::StyleTTS2), // NB: Model is static during inference maybe_model_token: None, // NB: Model is static during inference @@ -210,7 +215,8 @@ pub async fn enqueue_tts_request( maybe_creator_user_token: maybe_user_token.as_ref(), maybe_avt_token: maybe_avt_token.as_ref(), creator_ip_address: &ip_address, - creator_set_visibility: Visibility::Public, + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&Visibility::Public), + priority_level, requires_keepalive: true, // do we need this? I think so is_debug_request, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/voice_designer/voice_datasets/list_datasets_by_user.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/voice_designer/voice_datasets/list_datasets_by_user.rs index 518e40a9fa..6a10ef6a42 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/voice_designer/voice_datasets/list_datasets_by_user.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/voice_designer/voice_datasets/list_datasets_by_user.rs @@ -10,7 +10,7 @@ use log::warn; use utoipa::ToSchema; use crate::http_server::common_responses::user_details_lite::UserDetailsLight; -use enums_db::common::visibility::Visibility; +use enums_api::common::visibility::Visibility; use mysql_queries::queries::voice_designer::datasets::list_datasets_by_username::list_datasets_by_username; use tokens::tokens::zs_voice_datasets::ZsVoiceDatasetToken; @@ -129,7 +129,8 @@ pub async fn list_datasets_by_user_handler( ZsDatasetRecord { dataset_token: dataset.dataset_token, title: dataset.title, - creator_set_visibility: dataset.creator_set_visibility, + creator_set_visibility: enums_convert::common::visibility::visibility_to_api(&dataset.creator_set_visibility), + ietf_language_tag: dataset.ietf_language_tag, ietf_primary_language_subtag: dataset.ietf_primary_language_subtag, creator: UserDetailsLight::from_db_fields( diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/weights/get/get_weight_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/weights/get/get_weight_handler.rs index b04c0630a7..a016aa4fa2 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/weights/get/get_weight_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/weights/get/get_weight_handler.rs @@ -11,6 +11,7 @@ use utoipa::ToSchema; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use enums_db::by_table::model_weights::weights_category::WeightsCategory; +use enums_api::by_table::model_weights::weights_category::WeightsCategory as ApiWeightsCategory; use enums_db::common::visibility::Visibility; use enums_public::by_table::model_weights::public_weights_types::PublicWeightsType; use mysql_queries::queries::model_weights::get::get_weight::get_weight_by_token; @@ -214,8 +215,10 @@ pub async fn get_weight_handler( weight_token: weight.token, maybe_url_slug: title_to_url_slug(&weight.title), title: weight.title, - weight_type: PublicWeightsType::from_enum(weight.weights_type), - weight_category: weight.weights_category, + weight_type: enums_convert::by_table::model_weights::weights_types::weights_type_to_api(&PublicWeightsType::from_enum(weight.weights_type)), + + weight_category: enums_convert::by_table::model_weights::weights_category::weights_category_to_api(&weight.weights_category), + // TODO(bt,2023-12-24): Migrated the column. We should return nullable fields, but I don't want to break the frontend description_markdown: weight.maybe_description_markdown.unwrap_or_else(|| "".to_string()), description_rendered_html: weight.maybe_description_rendered_html.unwrap_or_else(|| "".to_string()), @@ -224,7 +227,8 @@ pub async fn get_weight_handler( cover_image: cover_image_details, maybe_cover_image_public_bucket_path: maybe_cover_image, creator, - creator_set_visibility: weight.creator_set_visibility, + creator_set_visibility: enums_convert::common::visibility::visibility_to_api(&weight.creator_set_visibility), + file_size_bytes: weight.file_size_bytes, file_checksum_sha2: weight.file_checksum_sha2, is_featured: weight.is_featured, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/weights/list/list_available_weights_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/weights/list/list_available_weights_handler.rs index cda3e68515..3525a64741 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/weights/list/list_available_weights_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/weights/list/list_available_weights_handler.rs @@ -256,8 +256,10 @@ pub async fn list_available_weights_handler( weight_token: weight.token, maybe_url_slug: title_to_url_slug(&weight.title), title: weight.title, - weight_type: weight.weights_type, - weight_category: weight.weights_category, + weight_type: enums_convert::by_table::model_weights::weights_types::weights_type_to_api(&weight.weights_type), + + weight_category: enums_convert::by_table::model_weights::weights_category::weights_category_to_api(&weight.weights_category), + maybe_ietf_language_tag: weight.maybe_ietf_language_tag, maybe_ietf_primary_language_subtag: weight.maybe_ietf_primary_language_subtag, @@ -271,7 +273,8 @@ pub async fn list_available_weights_handler( &weight.creator_display_name, &weight.creator_email_gravatar_hash ), - creator_set_visibility: weight.creator_set_visibility, + creator_set_visibility: enums_convert::common::visibility::visibility_to_api(&weight.creator_set_visibility), + file_size_bytes: weight.file_size_bytes, file_checksum_sha2: weight.file_checksum_sha2, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/weights/list/list_featured_weights_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/weights/list/list_featured_weights_handler.rs index c6ef2b468c..b5ca05fb5e 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/weights/list/list_featured_weights_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/weights/list/list_featured_weights_handler.rs @@ -10,7 +10,9 @@ use utoipa::{IntoParams, ToSchema}; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use enums_db::by_table::model_weights::weights_category::WeightsCategory; +use enums_api::by_table::model_weights::weights_category::WeightsCategory as ApiWeightsCategory; use enums_db::common::view_as::ViewAs; +use enums_api::common::view_as::ViewAs as ApiViewAs; use enums_public::by_table::model_weights::public_weights_types::PublicWeightsType; use mysql_queries::queries::model_weights::list::list_featured_weights::{list_featured_weights, ListFeaturedWeightsArgs}; use primitives::numerics::u64_to_u32_saturating::u64_to_u32_saturating; @@ -63,7 +65,7 @@ pub struct FeaturedModelWeightForList { pub weight_token: ModelWeightToken, pub weight_type: PublicWeightsType, - pub weight_category: WeightsCategory, + pub weight_category: ApiWeightsCategory, pub title: String, @@ -259,8 +261,10 @@ pub async fn list_featured_weights_handler( title: w.title, maybe_ietf_language_tag: w.maybe_ietf_language_tag, maybe_ietf_primary_language_subtag: w.maybe_ietf_primary_language_subtag, - weight_type: PublicWeightsType::from_enum(w.weights_type), - weight_category: w.weights_category, + weight_type: enums_convert::by_table::model_weights::weights_types::weights_type_to_api(&PublicWeightsType::from_enum(w.weights_type)), + + weight_category: enums_convert::by_table::model_weights::weights_category::weights_category_to_api(&w.weights_category), + cover_image: cover_image_details, maybe_cover_image_public_bucket_path: maybe_cover_image, creator: UserDetailsLight::from_optional_db_fields( diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/weights/list/list_pinned_weights_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/weights/list/list_pinned_weights_handler.rs index 0b9fdac227..7fd93df67e 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/weights/list/list_pinned_weights_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/weights/list/list_pinned_weights_handler.rs @@ -10,6 +10,7 @@ use utoipa::ToSchema; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use enums_db::by_table::model_weights::weights_category::WeightsCategory; +use enums_api::by_table::model_weights::weights_category::WeightsCategory as ApiWeightsCategory; use enums_public::by_table::model_weights::public_weights_types::PublicWeightsType; use mysql_queries::queries::model_weights::list::list_weights_by_tokens::list_weights_by_tokens; use primitives::numerics::u64_to_u32_saturating::u64_to_u32_saturating; @@ -33,7 +34,7 @@ pub struct PinnedModelWeightForList { pub weight_token: ModelWeightToken, pub weight_type: PublicWeightsType, - pub weight_category: WeightsCategory, + pub weight_category: ApiWeightsCategory, pub title: String, @@ -180,8 +181,10 @@ pub async fn list_pinned_weights_handler( title: w.title, maybe_ietf_language_tag: w.maybe_ietf_language_tag, maybe_ietf_primary_language_subtag: w.maybe_ietf_primary_language_subtag, - weight_type: PublicWeightsType::from_enum(w.weights_type), - weight_category: w.weights_category, + weight_type: enums_convert::by_table::model_weights::weights_types::weights_type_to_api(&PublicWeightsType::from_enum(w.weights_type)), + + weight_category: enums_convert::by_table::model_weights::weights_category::weights_category_to_api(&w.weights_category), + cover_image: cover_image_details, maybe_cover_image_public_bucket_path: maybe_cover_image, creator: UserDetailsLight::from_db_fields( diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/weights/list/list_weights_by_user_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/weights/list/list_weights_by_user_handler.rs index 21dc4fa398..0eb1a9767e 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/weights/list/list_weights_by_user_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/weights/list/list_weights_by_user_handler.rs @@ -11,7 +11,9 @@ use utoipa::{IntoParams, ToSchema}; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use enums_db::by_table::model_weights::weights_category::WeightsCategory; +use enums_api::by_table::model_weights::weights_category::WeightsCategory as ApiWeightsCategory; use enums_db::common::view_as::ViewAs; +use enums_api::common::view_as::ViewAs as ApiViewAs; use enums_db::common::visibility::Visibility; use enums_public::by_table::model_weights::public_weights_types::PublicWeightsType; use mysql_queries::queries::model_weights::list::list_weights_by_user::{list_weights_by_creator_username, ListWeightsForUserArgs}; @@ -97,7 +99,7 @@ pub struct ListWeightsForUserQueryParams { /// Optional. Scope to only the exact weight category, which may include /// multiple types of model (eg voice_conversion includes RVC, SVC, etc.) /// Shouldn't be used with weight type scoping - pub maybe_scoped_weight_category: Option, + pub maybe_scoped_weight_category: Option, } #[derive(Deserialize,ToSchema)] @@ -189,8 +191,10 @@ pub async fn list_weights_by_user_handler( page_index, sort_ascending, view_as, - maybe_scoped_weight_category: query.maybe_scoped_weight_category, - maybe_scoped_weight_type: query.maybe_scoped_weight_type.map(|w| w.to_enum()), + maybe_scoped_weight_category: enums_convert::by_table::model_weights::weights_category::weights_category_to_api(&query.maybe_scoped_weight_category), + + maybe_scoped_weight_type: enums_convert::by_table::model_weights::weights_types::weights_type_to_api(&query.maybe_scoped_weight_type.map(|w| w.to_enum())), + mysql_pool: &server_state.mysql_pool, } ).await.map_err(|e| { @@ -248,7 +252,8 @@ pub async fn list_weights_by_user_handler( maybe_cover_image_public_bucket_path: maybe_cover_image, file_size_bytes: weight.file_size_bytes, file_checksum_sha2: weight.file_checksum_sha2, - creator_set_visibility: weight.creator_set_visibility, + creator_set_visibility: enums_convert::common::visibility::visibility_to_api(&weight.creator_set_visibility), + stats: SimpleEntityStats { positive_rating_count: weight.maybe_ratings_positive_count.unwrap_or(0), bookmark_count: weight.maybe_bookmark_count.unwrap_or(0), diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/weights/search/search_model_weights_impl.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/weights/search/search_model_weights_impl.rs index 6a3e1080f5..e37547e86b 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/weights/search/search_model_weights_impl.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/weights/search/search_model_weights_impl.rs @@ -25,7 +25,9 @@ use crate::util::title_to_url_slug::title_to_url_slug; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use elasticsearch_schema::searches::search_model_weights::search_model_weights::{search_model_weights, ModelWeightsSortDirection, ModelWeightsSortField, SearchArgs}; use enums_db::by_table::model_weights::weights_category::WeightsCategory; +use enums_api::by_table::model_weights::weights_category::WeightsCategory as ApiWeightsCategory; use enums_db::by_table::model_weights::weights_types::WeightsType; +use enums_api::by_table::model_weights::weights_types::WeightsType as ApiWeightsType; use enums_db::common::visibility::Visibility; use enums_public::by_table::model_weights::public_weights_types::PublicWeightsType; use primitives::numerics::i32_to_u32_zero_clamped::i32_to_u32_zero_clamped; @@ -34,8 +36,8 @@ use tokens::tokens::model_weights::ModelWeightToken; #[derive(Deserialize, ToSchema)] pub struct SearchModelWeightsRequest { pub search_term: String, - pub weight_type: Option, - pub weight_category: Option, + pub weight_type: Option, + pub weight_category: Option, pub ietf_language_subtag: Option, pub minimum_score: Option, pub sort_field: Option, @@ -69,7 +71,7 @@ pub struct ModelWeightSearchResult { pub weight_token: ModelWeightToken, pub weight_type: PublicWeightsType, - pub weight_category: WeightsCategory, + pub weight_category: ApiWeightsCategory, pub creator_set_visibility: Visibility, @@ -221,8 +223,10 @@ pub async fn search_model_weights_impl( ModelWeightSearchResult { weight_token: result.token, - weight_type: PublicWeightsType::from_enum(result.weights_type), - weight_category: result.weights_category, + weight_type: enums_convert::by_table::model_weights::weights_types::weights_type_to_api(&PublicWeightsType::from_enum(result.weights_type)), + + weight_category: enums_convert::by_table::model_weights::weights_category::weights_category_to_api(&result.weights_category), + maybe_url_slug: title_to_url_slug(&result.title), title: result.title, creator: UserDetailsLight::from_db_fields( @@ -241,7 +245,8 @@ pub async fn search_model_weights_impl( usage_count: i32_to_u32_zero_clamped(result.cached_usage_count.unwrap_or(0)), maybe_ietf_language_tag: result.maybe_ietf_language_tag, maybe_ietf_primary_language_subtag: result.maybe_ietf_primary_language_subtag, - creator_set_visibility: result.creator_set_visibility, + creator_set_visibility: enums_convert::common::visibility::visibility_to_api(&result.creator_set_visibility), + created_at: result.created_at, updated_at: result.updated_at, } diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/weights/update/set_model_weight_cover_image_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/weights/update/set_model_weight_cover_image_handler.rs index 9742125ab3..5225a35d86 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/weights/update/set_model_weight_cover_image_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/weights/update/set_model_weight_cover_image_handler.rs @@ -9,6 +9,7 @@ use log::warn; use utoipa::ToSchema; use enums_db::by_table::media_files::media_file_type::MediaFileType; +use enums_api::by_table::media_files::media_file_type::MediaFileType as ApiMediaFileType; use http_server_common::request::get_request_ip::get_request_ip; use http_server_common::response::response_success_helpers::simple_json_success; use http_server_common::response::serialize_as_json_error::serialize_as_json_error; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/weights/update/update_weight_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/weights/update/update_weight_handler.rs index 9e68da08fc..a6c9f8e8b4 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/weights/update/update_weight_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/weights/update/update_weight_handler.rs @@ -14,7 +14,9 @@ use crate::http_server::web_utils::user_session::require_user_session::RequireUs use crate::http_server::web_utils::user_session::require_user_session_using_connection::require_user_session_using_connection; use crate::state::server_state::ServerState; use enums_db::by_table::media_files::media_file_type::MediaFileType; +use enums_api::by_table::media_files::media_file_type::MediaFileType as ApiMediaFileType; use enums_db::by_table::model_weights::weights_types::WeightsType; +use enums_api::by_table::model_weights::weights_types::WeightsType as ApiWeightsType; use enums_db::common::visibility::Visibility; use http_server_common::response::response_success_helpers::{simple_json_success, SimpleGenericJsonSuccess}; use http_server_common::response::serialize_as_json_error::serialize_as_json_error; @@ -220,11 +222,16 @@ pub async fn update_weight_handler( // Only voice models have a language. match weight.weights_type { WeightsType::Tacotron2 => {} + WeightsType::GptSoVits => {} WeightsType::SoVitsSvc => {} + WeightsType::RvcV2 => {} + WeightsType::HifiganTacotron2 => {} + WeightsType::VallE => {} + _ => { return Err(UpdateWeightError::BadInput("Language tag is not applicable to this model type".to_string())); } @@ -246,7 +253,8 @@ pub async fn update_weight_handler( cover_image, maybe_description_markdown: description_markdown.as_deref(), maybe_description_rendered_html: description_rendered_html.as_deref(), - creator_set_visibility: request.visibility.as_ref(), + creator_set_visibility: enums_convert::common::visibility::visibility_to_db(&request.visibility.as_ref()), + ietf_language_tag: ietf_language_tag.as_deref(), ietf_primary_language_subtag: ietf_primary_language_subtag.as_deref(), transactor: Transactor::for_connection(&mut mysql_connection),