diff --git a/crates/lib/mysql_queries/src/queries/user_bookmarks/list_user_bookmarks.rs b/crates/lib/mysql_queries/src/queries/user_bookmarks/list_user_bookmarks.rs index ee9ea9bfa1..b307fc5d11 100644 --- a/crates/lib/mysql_queries/src/queries/user_bookmarks/list_user_bookmarks.rs +++ b/crates/lib/mysql_queries/src/queries/user_bookmarks/list_user_bookmarks.rs @@ -53,6 +53,9 @@ fn select_result_fields() -> &'static str { media_files.media_type as maybe_media_file_type, media_files.origin_product_category as maybe_media_file_origin_category, + model_weights.weights_type as maybe_model_weight_type, + model_weights.weights_category as maybe_model_weight_category, + model_weights.title as maybe_descriptive_text_model_weight_title, tts_models.title as maybe_descriptive_text_tts_model_title, tts_results.raw_inference_text as maybe_descriptive_text_tts_result_inference_text, diff --git a/crates/lib/mysql_queries/src/queries/user_bookmarks/list_user_bookmarks_result.rs b/crates/lib/mysql_queries/src/queries/user_bookmarks/list_user_bookmarks_result.rs index 398b4e18be..82ba758583 100644 --- a/crates/lib/mysql_queries/src/queries/user_bookmarks/list_user_bookmarks_result.rs +++ b/crates/lib/mysql_queries/src/queries/user_bookmarks/list_user_bookmarks_result.rs @@ -4,6 +4,8 @@ use sqlx::mysql::MySqlRow; use enums::by_table::media_files::media_file_origin_category::MediaFileOriginCategory; use enums::by_table::media_files::media_file_type::MediaFileType; +use enums::by_table::model_weights::weights_category::WeightsCategory; +use enums::by_table::model_weights::weights_types::WeightsType; use enums::by_table::user_bookmarks::user_bookmark_entity_type::UserBookmarkEntityType; use enums::traits::mysql_from_row::MySqlFromRow; use tokens::tokens::user_bookmarks::UserBookmarkToken; @@ -19,6 +21,12 @@ pub struct UserBookmark { /// This might be TTS text, a username, etc. It depends on the entity type. pub maybe_entity_descriptive_text: Option, + /// Only set if the bookmark is of a model_weights record. + pub maybe_model_weight_type: Option, + + /// Only set if the bookmark is of a model_weights record. + pub maybe_model_weight_category: Option, + pub user_token: UserToken, pub username: String, pub user_display_name: String, @@ -47,6 +55,9 @@ pub struct RawUserBookmarkRecord { pub (crate) maybe_media_file_type: Option, pub (crate) maybe_media_file_origin_category: Option, + pub (crate) maybe_model_weight_type: Option, + pub (crate) maybe_model_weight_category: Option, + pub (crate) maybe_descriptive_text_model_weight_title: Option, pub (crate) maybe_descriptive_text_tts_model_title: Option, pub (crate) maybe_descriptive_text_tts_result_inference_text: Option, @@ -78,6 +89,8 @@ impl RawUserBookmarkRecord { UserBookmarkEntityType::VoiceConversionModel => self.maybe_descriptive_text_voice_conversion_model_title, UserBookmarkEntityType::ZsVoice => self.maybe_descriptive_text_zs_voice_title, }, + maybe_model_weight_type: self.maybe_model_weight_type, + maybe_model_weight_category: self.maybe_model_weight_category, user_token: self.user_token, username: self.username, user_display_name: self.user_display_name, @@ -104,6 +117,8 @@ impl FromRow<'_, MySqlRow> for RawUserBookmarkRecord { deleted_at: row.try_get("deleted_at")?, maybe_media_file_type: MediaFileType::try_from_mysql_row_nullable(row,"maybe_media_file_type")?, maybe_media_file_origin_category: MediaFileOriginCategory::try_from_mysql_row_nullable(row,"maybe_media_file_origin_category")?, + maybe_model_weight_type: WeightsType::try_from_mysql_row_nullable(row, "maybe_model_weight_type")?, + maybe_model_weight_category: WeightsCategory::try_from_mysql_row_nullable(row, "maybe_model_weight_category")?, maybe_descriptive_text_model_weight_title: row.try_get("maybe_descriptive_text_model_weight_title")?, maybe_descriptive_text_tts_model_title: row.try_get("maybe_descriptive_text_tts_model_title")?, maybe_descriptive_text_tts_result_inference_text: row.try_get("maybe_descriptive_text_tts_result_inference_text")?, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/user_bookmarks/list_user_bookmarks_for_user_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/user_bookmarks/list_user_bookmarks_for_user_handler.rs index bbcab9681a..875f1b7d5a 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/user_bookmarks/list_user_bookmarks_for_user_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/user_bookmarks/list_user_bookmarks_for_user_handler.rs @@ -82,6 +82,16 @@ pub struct UserBookmarkDetailsForUserList { // TODO: Populate this for images, video, etc. pub maybe_thumbnail_url: Option, + + /// This is only populated if the item is a model weight. + pub maybe_weights_data: Option, +} + +#[derive(Serialize, ToSchema)] +pub struct WeightsData { + pub title: String, + pub weights_type: WeightsType, + pub weights_category: WeightsCategory, } #[derive(Debug, ToSchema)] @@ -164,6 +174,15 @@ pub async fn list_user_bookmarks_for_user_handler( details: UserBookmarkDetailsForUserList { entity_type: user_bookmark.entity_type, entity_token: user_bookmark.entity_token, + maybe_weights_data: match user_bookmark.entity_type { + UserBookmarkEntityType::ModelWeight => 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("weight".to_string()), + weights_type: user_bookmark.maybe_model_weight_type.unwrap_or(WeightsType::Tacotron2), + weights_category: user_bookmark.maybe_model_weight_category.unwrap_or(WeightsCategory::TextToSpeech), + }), + _ => None, + }, maybe_summary_text: user_bookmark.maybe_entity_descriptive_text, // TODO(bt,2023-11-21): Thumbnails need proper support. We should build them as a // first-class system before handling the backfill here.