diff --git a/crates/lib/mysql_queries/src/queries/media_files/batch_get_media_files.rs b/crates/lib/mysql_queries/src/queries/media_files/batch_get_media_files.rs index 0c4dd8ac0e..3a5a6de6a3 100644 --- a/crates/lib/mysql_queries/src/queries/media_files/batch_get_media_files.rs +++ b/crates/lib/mysql_queries/src/queries/media_files/batch_get_media_files.rs @@ -54,6 +54,10 @@ pub struct MediaFile { pub maybe_prompt_token: Option, + pub maybe_file_cover_image_public_bucket_hash: Option, + pub maybe_file_cover_image_public_bucket_prefix: Option, + pub maybe_file_cover_image_public_bucket_extension: Option, + pub maybe_model_weights_token: Option, pub maybe_model_weights_title: Option, pub maybe_model_weights_type: Option, @@ -122,6 +126,10 @@ pub struct MediaFileRaw { pub maybe_prompt_token: Option, + pub maybe_file_cover_image_public_bucket_hash: Option, + pub maybe_file_cover_image_public_bucket_prefix: Option, + pub maybe_file_cover_image_public_bucket_extension: Option, + pub maybe_model_weights_token: Option, pub maybe_model_weights_title: Option, pub maybe_model_weights_type: Option, @@ -209,6 +217,9 @@ pub async fn batch_get_media_files( maybe_creator_gravatar_hash: record.maybe_creator_gravatar_hash, creator_set_visibility: record.creator_set_visibility, maybe_prompt_token: record.maybe_prompt_token, + maybe_file_cover_image_public_bucket_hash: record.maybe_file_cover_image_public_bucket_hash, + maybe_file_cover_image_public_bucket_prefix: record.maybe_file_cover_image_public_bucket_prefix, + maybe_file_cover_image_public_bucket_extension: record.maybe_file_cover_image_public_bucket_extension, maybe_model_weights_token: record.maybe_model_weights_token, maybe_model_weights_title: record.maybe_model_weights_title, maybe_model_weights_type: record.maybe_model_weights_type, @@ -257,6 +268,10 @@ SELECT m.maybe_prompt_token, + media_file_cover_image.public_bucket_directory_hash as maybe_file_cover_image_public_bucket_hash, + media_file_cover_image.maybe_public_bucket_prefix as maybe_file_cover_image_public_bucket_prefix, + media_file_cover_image.maybe_public_bucket_extension as maybe_file_cover_image_public_bucket_extension, + m.creator_set_visibility, model_weights.token as maybe_model_weights_token, @@ -264,9 +279,9 @@ SELECT model_weights.weights_type as maybe_model_weights_type, model_weights.weights_category as maybe_model_weights_category, - cover_image.public_bucket_directory_hash as maybe_model_cover_image_public_bucket_hash, - cover_image.maybe_public_bucket_prefix as maybe_model_cover_image_public_bucket_prefix, - cover_image.maybe_public_bucket_extension as maybe_model_cover_image_public_bucket_extension, + model_weight_cover_image.public_bucket_directory_hash as maybe_model_cover_image_public_bucket_hash, + model_weight_cover_image.maybe_public_bucket_prefix as maybe_model_cover_image_public_bucket_prefix, + model_weight_cover_image.maybe_public_bucket_extension as maybe_model_cover_image_public_bucket_extension, model_weight_creator.token as maybe_model_weight_creator_user_token, model_weight_creator.username as maybe_model_weight_creator_username, @@ -289,8 +304,10 @@ LEFT OUTER JOIN users ON m.maybe_creator_user_token = users.token LEFT OUTER JOIN model_weights ON m.maybe_origin_model_token = model_weights.token -LEFT OUTER JOIN media_files as cover_image - ON cover_image.token = model_weights.maybe_cover_image_media_file_token +LEFT OUTER JOIN media_files as media_file_cover_image + ON media_file_cover_image.token = m.maybe_cover_image_media_file_token +LEFT OUTER JOIN media_files as model_weight_cover_image + ON model_weight_cover_image.token = model_weights.maybe_cover_image_media_file_token LEFT OUTER JOIN users as model_weight_creator ON model_weight_creator.token = model_weights.creator_user_token LEFT OUTER JOIN entity_stats @@ -333,6 +350,10 @@ impl FromRow<'_, MySqlRow> for MediaFileRaw { maybe_prompt_token: PromptToken::try_from_mysql_row_nullable(row, "maybe_prompt_token")?, + maybe_file_cover_image_public_bucket_hash: row.try_get("maybe_file_cover_image_public_bucket_hash")?, + maybe_file_cover_image_public_bucket_prefix: row.try_get("maybe_file_cover_image_public_bucket_prefix")?, + maybe_file_cover_image_public_bucket_extension: row.try_get("maybe_file_cover_image_public_bucket_extension")?, + maybe_model_weights_token: ModelWeightToken::try_from_mysql_row_nullable(row, "maybe_model_weights_token")?, maybe_model_weights_title: row.try_get("maybe_model_weights_title")?, maybe_model_weights_type: WeightsType::try_from_mysql_row_nullable(row, "maybe_model_weights_type")?, diff --git a/crates/lib/mysql_queries/src/queries/media_files/get_media_file.rs b/crates/lib/mysql_queries/src/queries/media_files/get_media_file.rs index dadd42394d..708d82e2f9 100644 --- a/crates/lib/mysql_queries/src/queries/media_files/get_media_file.rs +++ b/crates/lib/mysql_queries/src/queries/media_files/get_media_file.rs @@ -55,6 +55,10 @@ pub struct MediaFile { pub maybe_prompt_token: Option, + pub maybe_file_cover_image_public_bucket_hash: Option, + pub maybe_file_cover_image_public_bucket_prefix: Option, + pub maybe_file_cover_image_public_bucket_extension: Option, + pub maybe_model_weights_token: Option, pub maybe_model_weights_title: Option, pub maybe_model_weights_type: Option, @@ -126,6 +130,10 @@ pub struct MediaFileRaw { pub maybe_prompt_token: Option, + pub maybe_file_cover_image_public_bucket_hash: Option, + pub maybe_file_cover_image_public_bucket_prefix: Option, + pub maybe_file_cover_image_public_bucket_extension: Option, + pub maybe_model_weights_token: Option, pub maybe_model_weights_title: Option, pub maybe_model_weights_type: Option, @@ -194,6 +202,9 @@ pub async fn get_media_file( maybe_creator_anonymous_visitor_token: record.maybe_creator_anonymous_visitor_token, creator_set_visibility: record.creator_set_visibility, maybe_prompt_token: record.maybe_prompt_token, + maybe_file_cover_image_public_bucket_hash: record.maybe_file_cover_image_public_bucket_hash, + maybe_file_cover_image_public_bucket_prefix: record.maybe_file_cover_image_public_bucket_prefix, + maybe_file_cover_image_public_bucket_extension: record.maybe_file_cover_image_public_bucket_extension, maybe_model_weights_token: record.maybe_model_weights_token, maybe_model_weights_title: record.maybe_model_weights_title, maybe_model_weights_type: record.maybe_model_weights_type, @@ -248,6 +259,10 @@ SELECT m.maybe_prompt_token as `maybe_prompt_token: tokens::tokens::prompts::PromptToken`, + media_file_cover_image.public_bucket_directory_hash as maybe_file_cover_image_public_bucket_hash, + media_file_cover_image.maybe_public_bucket_prefix as maybe_file_cover_image_public_bucket_prefix, + media_file_cover_image.maybe_public_bucket_extension as maybe_file_cover_image_public_bucket_extension, + m.creator_set_visibility as `creator_set_visibility: enums::common::visibility::Visibility`, model_weights.token as `maybe_model_weights_token: tokens::tokens::model_weights::ModelWeightToken`, @@ -255,9 +270,9 @@ SELECT model_weights.weights_type as `maybe_model_weights_type: enums::by_table::model_weights::weights_types::WeightsType`, model_weights.weights_category as `maybe_model_weights_category: enums::by_table::model_weights::weights_category::WeightsCategory`, - cover_image.public_bucket_directory_hash as maybe_model_cover_image_public_bucket_hash, - cover_image.maybe_public_bucket_prefix as maybe_model_cover_image_public_bucket_prefix, - cover_image.maybe_public_bucket_extension as maybe_model_cover_image_public_bucket_extension, + model_weight_cover_image.public_bucket_directory_hash as maybe_model_cover_image_public_bucket_hash, + model_weight_cover_image.maybe_public_bucket_prefix as maybe_model_cover_image_public_bucket_prefix, + model_weight_cover_image.maybe_public_bucket_extension as maybe_model_cover_image_public_bucket_extension, model_weight_creator.token as `maybe_model_weight_creator_user_token: tokens::tokens::users::UserToken`, model_weight_creator.username as maybe_model_weight_creator_username, @@ -280,8 +295,10 @@ LEFT OUTER JOIN users ON m.maybe_creator_user_token = users.token LEFT OUTER JOIN model_weights ON m.maybe_origin_model_token = model_weights.token -LEFT OUTER JOIN media_files as cover_image - ON cover_image.token = model_weights.maybe_cover_image_media_file_token +LEFT OUTER JOIN media_files as media_file_cover_image + ON media_file_cover_image.token = m.maybe_cover_image_media_file_token +LEFT OUTER JOIN media_files as model_weight_cover_image + ON model_weight_cover_image.token = model_weights.maybe_cover_image_media_file_token LEFT OUTER JOIN users as model_weight_creator ON model_weight_creator.token = model_weights.creator_user_token LEFT OUTER JOIN entity_stats @@ -328,6 +345,10 @@ SELECT m.maybe_prompt_token as `maybe_prompt_token: tokens::tokens::prompts::PromptToken`, + media_file_cover_image.public_bucket_directory_hash as maybe_file_cover_image_public_bucket_hash, + media_file_cover_image.maybe_public_bucket_prefix as maybe_file_cover_image_public_bucket_prefix, + media_file_cover_image.maybe_public_bucket_extension as maybe_file_cover_image_public_bucket_extension, + m.creator_set_visibility as `creator_set_visibility: enums::common::visibility::Visibility`, model_weights.token as `maybe_model_weights_token: tokens::tokens::model_weights::ModelWeightToken`, @@ -335,9 +356,9 @@ SELECT model_weights.weights_type as `maybe_model_weights_type: enums::by_table::model_weights::weights_types::WeightsType`, model_weights.weights_category as `maybe_model_weights_category: enums::by_table::model_weights::weights_category::WeightsCategory`, - cover_image.public_bucket_directory_hash as maybe_model_cover_image_public_bucket_hash, - cover_image.maybe_public_bucket_prefix as maybe_model_cover_image_public_bucket_prefix, - cover_image.maybe_public_bucket_extension as maybe_model_cover_image_public_bucket_extension, + model_weight_cover_image.public_bucket_directory_hash as maybe_model_cover_image_public_bucket_hash, + model_weight_cover_image.maybe_public_bucket_prefix as maybe_model_cover_image_public_bucket_prefix, + model_weight_cover_image.maybe_public_bucket_extension as maybe_model_cover_image_public_bucket_extension, model_weight_creator.token as `maybe_model_weight_creator_user_token: tokens::tokens::users::UserToken`, model_weight_creator.username as maybe_model_weight_creator_username, @@ -360,8 +381,10 @@ LEFT OUTER JOIN users ON m.maybe_creator_user_token = users.token LEFT OUTER JOIN model_weights ON m.maybe_origin_model_token = model_weights.token -LEFT OUTER JOIN media_files as cover_image - ON cover_image.token = model_weights.maybe_cover_image_media_file_token +LEFT OUTER JOIN media_files as media_file_cover_image + ON media_file_cover_image.token = m.maybe_cover_image_media_file_token +LEFT OUTER JOIN media_files as model_weight_cover_image + ON model_weight_cover_image.token = model_weights.maybe_cover_image_media_file_token LEFT OUTER JOIN users as model_weight_creator ON model_weight_creator.token = model_weights.creator_user_token LEFT OUTER JOIN entity_stats diff --git a/crates/service/web/storyteller_web/src/http_server/common_responses/media_file_cover_image_details.rs b/crates/service/web/storyteller_web/src/http_server/common_responses/media_file_cover_image_details.rs index 55fdff16f5..a349e049a7 100644 --- a/crates/service/web/storyteller_web/src/http_server/common_responses/media_file_cover_image_details.rs +++ b/crates/service/web/storyteller_web/src/http_server/common_responses/media_file_cover_image_details.rs @@ -2,8 +2,12 @@ use std::collections::hash_map::DefaultHasher; use std::hash::{Hash, Hasher}; use utoipa::ToSchema; +use buckets::public::media_files::bucket_file_path::MediaFileBucketPath; use tokens::tokens::media_files::MediaFileToken; +use tokens::tokens::model_weights::ModelWeightToken; +use crate::http_server::common_responses::weights_cover_image_details::WeightsDefaultCoverInfo; +use crate::util::placeholder_images::cover_images::default_cover_image_from_token::default_cover_image_from_token; /// There are currently 25 cover images numbered 0 to 24 (0-indexed). /// The original dataset was numbered 1 - 25, but I renamed 25 to 0. @@ -49,6 +53,44 @@ impl MediaFileCoverImageDetails { default_cover: MediaFileDefaultCover::from_token_str(token), } } + + pub fn from_optional_db_fields( + token: &MediaFileToken, + maybe_cover_image_public_bucket_path: Option<&str>, + maybe_cover_image_public_bucket_prefix: Option<&str>, + maybe_cover_image_public_bucket_extension: Option<&str>, + ) -> Self { + Self::from_optional_db_str_fields( + token.as_str(), + maybe_cover_image_public_bucket_path, + maybe_cover_image_public_bucket_prefix, + maybe_cover_image_public_bucket_extension + ) + } + + pub fn from_optional_db_str_fields( + token: &str, + maybe_cover_image_public_bucket_path: Option<&str>, + maybe_cover_image_public_bucket_prefix: Option<&str>, + maybe_cover_image_public_bucket_extension: Option<&str>, + ) -> Self { + let maybe_bucket_path = maybe_cover_image_public_bucket_path + .map(|hash| MediaFileBucketPath::from_object_hash( + hash, + maybe_cover_image_public_bucket_prefix, + maybe_cover_image_public_bucket_extension + )); + + let maybe_cover_image_public_bucket_path = maybe_bucket_path + .map(|bucket_path| bucket_path + .get_full_object_path_str() + .to_string()); + + Self { + maybe_cover_image_public_bucket_path, + default_cover: MediaFileDefaultCover::from_token_str(token), + } + } } impl MediaFileDefaultCover { diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/batch_get_media_files_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/batch_get_media_files_handler.rs index a4bae0960e..f6aaddc40b 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/batch_get_media_files_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/batch_get_media_files_handler.rs @@ -288,7 +288,12 @@ pub async fn batch_get_media_files_handler( maybe_engine_extension, maybe_batch_token: result.maybe_batch_token, public_bucket_path, - cover_image: MediaFileCoverImageDetails::from_token(&result.token), + cover_image: MediaFileCoverImageDetails::from_optional_db_fields( + &result.token, + result.maybe_file_cover_image_public_bucket_hash.as_deref(), + result.maybe_file_cover_image_public_bucket_prefix.as_deref(), + result.maybe_file_cover_image_public_bucket_extension.as_deref(), + ), maybe_title: result.maybe_title, maybe_text_transcript: result.maybe_text_transcript, maybe_model_weight_info: match result.maybe_model_weights_token { diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/get_media_file_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/get_media_file_handler.rs index 1eaf9d19b3..844e2714d3 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/get_media_file_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/get_media_file_handler.rs @@ -304,7 +304,12 @@ async fn modern_media_file_lookup( maybe_engine_extension, maybe_batch_token: result.maybe_batch_token, public_bucket_path, - cover_image: MediaFileCoverImageDetails::from_token(&result.token), + cover_image: MediaFileCoverImageDetails::from_optional_db_fields( + &result.token, + result.maybe_file_cover_image_public_bucket_hash.as_deref(), + result.maybe_file_cover_image_public_bucket_prefix.as_deref(), + result.maybe_file_cover_image_public_bucket_extension.as_deref(), + ), maybe_title: result.maybe_title, maybe_text_transcript: result.maybe_text_transcript, maybe_model_weight_info: match result.maybe_model_weights_token {