From b331cc999cd89a4441dc68ff3cd0ddf303afebff Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Thu, 28 Dec 2023 23:08:54 -0500 Subject: [PATCH] get weight - add creator + cover for model weights; rename fields --- ...998d8e71b4957989a9a856ebaf7fb52bab42.json} | 91 +++++++++++++++++-- ...7bcb3c55fe57b2ad7d3ebbbdbc63573069ba.json} | 91 +++++++++++++++++-- .../src/queries/media_files/get_media_file.rs | 51 +++++++++++ .../web/storyteller_web/src/api_doc.rs | 31 +++++-- .../endpoints/media_files/get_media_file.rs | 37 +++++++- 5 files changed, 274 insertions(+), 27 deletions(-) rename .sqlx/{query-4f0517f34dec33c7714a55272fd06cd9e5139f6a8acf83a2e20de431eb4a0f9d.json => query-5126434fe542604233d8c8a4f553998d8e71b4957989a9a856ebaf7fb52bab42.json} (63%) rename .sqlx/{query-59b2bf500a8f32919d08db935e01fbb2723d5356d3f045ca18889c9317589edd.json => query-58648783cb376fc7ad093ff50a8a7bcb3c55fe57b2ad7d3ebbbdbc63573069ba.json} (62%) diff --git a/.sqlx/query-4f0517f34dec33c7714a55272fd06cd9e5139f6a8acf83a2e20de431eb4a0f9d.json b/.sqlx/query-5126434fe542604233d8c8a4f553998d8e71b4957989a9a856ebaf7fb52bab42.json similarity index 63% rename from .sqlx/query-4f0517f34dec33c7714a55272fd06cd9e5139f6a8acf83a2e20de431eb4a0f9d.json rename to .sqlx/query-5126434fe542604233d8c8a4f553998d8e71b4957989a9a856ebaf7fb52bab42.json index 6e7372209..0ad286bf2 100644 --- a/.sqlx/query-4f0517f34dec33c7714a55272fd06cd9e5139f6a8acf83a2e20de431eb4a0f9d.json +++ b/.sqlx/query-5126434fe542604233d8c8a4f553998d8e71b4957989a9a856ebaf7fb52bab42.json @@ -1,6 +1,6 @@ { "db_name": "MySQL", - "query": "\nSELECT\n m.token as `token: tokens::tokens::media_files::MediaFileToken`,\n\n m.media_type as `media_type: enums::by_table::media_files::media_file_type::MediaFileType`,\n\n users.token as `maybe_creator_user_token: tokens::tokens::users::UserToken`,\n users.username as maybe_creator_username,\n users.display_name as maybe_creator_display_name,\n users.email_gravatar_hash as maybe_creator_gravatar_hash,\n\n m.creator_set_visibility as `creator_set_visibility: enums::common::visibility::Visibility`,\n\n model_weights.token as `maybe_model_weights_token: tokens::tokens::model_weights::ModelWeightToken`,\n model_weights.title as maybe_model_weights_title,\n model_weights.weights_type as `maybe_model_weights_type: enums::by_table::model_weights::weights_types::WeightsType`,\n model_weights.weights_category as `maybe_model_weights_category: enums::by_table::model_weights::weights_category::WeightsCategory`,\n\n m.public_bucket_directory_hash,\n m.maybe_public_bucket_prefix,\n m.maybe_public_bucket_extension,\n\n m.created_at,\n m.updated_at\n\nFROM media_files AS m\nLEFT OUTER JOIN users\n ON m.maybe_creator_user_token = users.token\nLEFT OUTER JOIN model_weights\n ON m.maybe_origin_model_token = model_weights.token\nWHERE\n m.token = ?\n ", + "query": "\nSELECT\n m.token as `token: tokens::tokens::media_files::MediaFileToken`,\n\n m.media_type as `media_type: enums::by_table::media_files::media_file_type::MediaFileType`,\n\n users.token as `maybe_creator_user_token: tokens::tokens::users::UserToken`,\n users.username as maybe_creator_username,\n users.display_name as maybe_creator_display_name,\n users.email_gravatar_hash as maybe_creator_gravatar_hash,\n\n m.creator_set_visibility as `creator_set_visibility: enums::common::visibility::Visibility`,\n\n model_weights.token as `maybe_model_weights_token: tokens::tokens::model_weights::ModelWeightToken`,\n model_weights.title as maybe_model_weights_title,\n model_weights.weights_type as `maybe_model_weights_type: enums::by_table::model_weights::weights_types::WeightsType`,\n model_weights.weights_category as `maybe_model_weights_category: enums::by_table::model_weights::weights_category::WeightsCategory`,\n\n cover_image.public_bucket_directory_hash as maybe_model_cover_image_public_bucket_hash,\n cover_image.maybe_public_bucket_prefix as maybe_model_cover_image_public_bucket_prefix,\n cover_image.maybe_public_bucket_extension as maybe_model_cover_image_public_bucket_extension,\n\n model_weight_creator.token as `maybe_model_weight_creator_user_token: tokens::tokens::users::UserToken`,\n model_weight_creator.username as maybe_model_weight_creator_username,\n model_weight_creator.display_name as maybe_model_weight_creator_display_name,\n model_weight_creator.email_gravatar_hash as maybe_model_weight_creator_gravatar_hash,\n\n m.public_bucket_directory_hash,\n m.maybe_public_bucket_prefix,\n m.maybe_public_bucket_extension,\n\n m.created_at,\n m.updated_at\n\nFROM media_files AS m\nLEFT OUTER JOIN users\n ON m.maybe_creator_user_token = users.token\nLEFT OUTER JOIN model_weights\n ON m.maybe_origin_model_token = model_weights.token\nLEFT OUTER JOIN media_files as cover_image\n ON cover_image.token = model_weights.maybe_cover_image_media_file_token\nLEFT OUTER JOIN users as model_weight_creator\n ON model_weight_creator.token = model_weights.creator_user_token\nWHERE\n m.token = ?\n ", "describe": { "columns": [ { @@ -115,17 +115,17 @@ }, { "ordinal": 11, - "name": "public_bucket_directory_hash", + "name": "maybe_model_cover_image_public_bucket_hash", "type_info": { "type": "VarString", - "flags": "NOT_NULL | BINARY | NO_DEFAULT_VALUE", + "flags": "BINARY | NO_DEFAULT_VALUE", "char_set": 224, "max_size": 128 } }, { "ordinal": 12, - "name": "maybe_public_bucket_prefix", + "name": "maybe_model_cover_image_public_bucket_prefix", "type_info": { "type": "VarString", "flags": "BINARY", @@ -135,7 +135,7 @@ }, { "ordinal": 13, - "name": "maybe_public_bucket_extension", + "name": "maybe_model_cover_image_public_bucket_extension", "type_info": { "type": "VarString", "flags": "BINARY", @@ -145,6 +145,76 @@ }, { "ordinal": 14, + "name": "maybe_model_weight_creator_user_token: tokens::tokens::users::UserToken", + "type_info": { + "type": "VarString", + "flags": "UNIQUE_KEY | BINARY | NO_DEFAULT_VALUE", + "char_set": 224, + "max_size": 128 + } + }, + { + "ordinal": 15, + "name": "maybe_model_weight_creator_username", + "type_info": { + "type": "VarString", + "flags": "UNIQUE_KEY | BINARY | NO_DEFAULT_VALUE", + "char_set": 224, + "max_size": 80 + } + }, + { + "ordinal": 16, + "name": "maybe_model_weight_creator_display_name", + "type_info": { + "type": "VarString", + "flags": "BINARY | NO_DEFAULT_VALUE", + "char_set": 224, + "max_size": 80 + } + }, + { + "ordinal": 17, + "name": "maybe_model_weight_creator_gravatar_hash", + "type_info": { + "type": "String", + "flags": "BINARY | NO_DEFAULT_VALUE", + "char_set": 224, + "max_size": 128 + } + }, + { + "ordinal": 18, + "name": "public_bucket_directory_hash", + "type_info": { + "type": "VarString", + "flags": "NOT_NULL | BINARY | NO_DEFAULT_VALUE", + "char_set": 224, + "max_size": 128 + } + }, + { + "ordinal": 19, + "name": "maybe_public_bucket_prefix", + "type_info": { + "type": "VarString", + "flags": "BINARY", + "char_set": 224, + "max_size": 64 + } + }, + { + "ordinal": 20, + "name": "maybe_public_bucket_extension", + "type_info": { + "type": "VarString", + "flags": "BINARY", + "char_set": 224, + "max_size": 64 + } + }, + { + "ordinal": 21, "name": "created_at", "type_info": { "type": "Timestamp", @@ -154,7 +224,7 @@ } }, { - "ordinal": 15, + "ordinal": 22, "name": "updated_at", "type_info": { "type": "Timestamp", @@ -179,6 +249,13 @@ true, true, true, + true, + true, + true, + true, + true, + true, + true, false, true, true, @@ -186,5 +263,5 @@ false ] }, - "hash": "4f0517f34dec33c7714a55272fd06cd9e5139f6a8acf83a2e20de431eb4a0f9d" + "hash": "5126434fe542604233d8c8a4f553998d8e71b4957989a9a856ebaf7fb52bab42" } diff --git a/.sqlx/query-59b2bf500a8f32919d08db935e01fbb2723d5356d3f045ca18889c9317589edd.json b/.sqlx/query-58648783cb376fc7ad093ff50a8a7bcb3c55fe57b2ad7d3ebbbdbc63573069ba.json similarity index 62% rename from .sqlx/query-59b2bf500a8f32919d08db935e01fbb2723d5356d3f045ca18889c9317589edd.json rename to .sqlx/query-58648783cb376fc7ad093ff50a8a7bcb3c55fe57b2ad7d3ebbbdbc63573069ba.json index 434ed1767..3b042ccf6 100644 --- a/.sqlx/query-59b2bf500a8f32919d08db935e01fbb2723d5356d3f045ca18889c9317589edd.json +++ b/.sqlx/query-58648783cb376fc7ad093ff50a8a7bcb3c55fe57b2ad7d3ebbbdbc63573069ba.json @@ -1,6 +1,6 @@ { "db_name": "MySQL", - "query": "\nSELECT\n m.token as `token: tokens::tokens::media_files::MediaFileToken`,\n\n m.media_type as `media_type: enums::by_table::media_files::media_file_type::MediaFileType`,\n\n users.token as `maybe_creator_user_token: tokens::tokens::users::UserToken`,\n users.username as maybe_creator_username,\n users.display_name as maybe_creator_display_name,\n users.email_gravatar_hash as maybe_creator_gravatar_hash,\n\n m.creator_set_visibility as `creator_set_visibility: enums::common::visibility::Visibility`,\n\n model_weights.token as `maybe_model_weights_token: tokens::tokens::model_weights::ModelWeightToken`,\n model_weights.title as maybe_model_weights_title,\n model_weights.weights_type as `maybe_model_weights_type: enums::by_table::model_weights::weights_types::WeightsType`,\n model_weights.weights_category as `maybe_model_weights_category: enums::by_table::model_weights::weights_category::WeightsCategory`,\n\n m.public_bucket_directory_hash,\n m.maybe_public_bucket_prefix,\n m.maybe_public_bucket_extension,\n\n m.created_at,\n m.updated_at\n\nFROM media_files AS m\nLEFT OUTER JOIN users\n ON m.maybe_creator_user_token = users.token\nLEFT OUTER JOIN model_weights\n ON m.maybe_origin_model_token = model_weights.token\nWHERE\n m.token = ?\n AND m.user_deleted_at IS NULL\n AND m.mod_deleted_at IS NULL\n ", + "query": "\nSELECT\n m.token as `token: tokens::tokens::media_files::MediaFileToken`,\n\n m.media_type as `media_type: enums::by_table::media_files::media_file_type::MediaFileType`,\n\n users.token as `maybe_creator_user_token: tokens::tokens::users::UserToken`,\n users.username as maybe_creator_username,\n users.display_name as maybe_creator_display_name,\n users.email_gravatar_hash as maybe_creator_gravatar_hash,\n\n m.creator_set_visibility as `creator_set_visibility: enums::common::visibility::Visibility`,\n\n model_weights.token as `maybe_model_weights_token: tokens::tokens::model_weights::ModelWeightToken`,\n model_weights.title as maybe_model_weights_title,\n model_weights.weights_type as `maybe_model_weights_type: enums::by_table::model_weights::weights_types::WeightsType`,\n model_weights.weights_category as `maybe_model_weights_category: enums::by_table::model_weights::weights_category::WeightsCategory`,\n\n cover_image.public_bucket_directory_hash as maybe_model_cover_image_public_bucket_hash,\n cover_image.maybe_public_bucket_prefix as maybe_model_cover_image_public_bucket_prefix,\n cover_image.maybe_public_bucket_extension as maybe_model_cover_image_public_bucket_extension,\n\n model_weight_creator.token as `maybe_model_weight_creator_user_token: tokens::tokens::users::UserToken`,\n model_weight_creator.username as maybe_model_weight_creator_username,\n model_weight_creator.display_name as maybe_model_weight_creator_display_name,\n model_weight_creator.email_gravatar_hash as maybe_model_weight_creator_gravatar_hash,\n\n m.public_bucket_directory_hash,\n m.maybe_public_bucket_prefix,\n m.maybe_public_bucket_extension,\n\n m.created_at,\n m.updated_at\n\nFROM media_files AS m\nLEFT OUTER JOIN users\n ON m.maybe_creator_user_token = users.token\nLEFT OUTER JOIN model_weights\n ON m.maybe_origin_model_token = model_weights.token\nLEFT OUTER JOIN media_files as cover_image\n ON cover_image.token = model_weights.maybe_cover_image_media_file_token\nLEFT OUTER JOIN users as model_weight_creator\n ON model_weight_creator.token = model_weights.creator_user_token\nWHERE\n m.token = ?\n AND m.user_deleted_at IS NULL\n AND m.mod_deleted_at IS NULL\n ", "describe": { "columns": [ { @@ -115,17 +115,17 @@ }, { "ordinal": 11, - "name": "public_bucket_directory_hash", + "name": "maybe_model_cover_image_public_bucket_hash", "type_info": { "type": "VarString", - "flags": "NOT_NULL | BINARY | NO_DEFAULT_VALUE", + "flags": "BINARY | NO_DEFAULT_VALUE", "char_set": 224, "max_size": 128 } }, { "ordinal": 12, - "name": "maybe_public_bucket_prefix", + "name": "maybe_model_cover_image_public_bucket_prefix", "type_info": { "type": "VarString", "flags": "BINARY", @@ -135,7 +135,7 @@ }, { "ordinal": 13, - "name": "maybe_public_bucket_extension", + "name": "maybe_model_cover_image_public_bucket_extension", "type_info": { "type": "VarString", "flags": "BINARY", @@ -145,6 +145,76 @@ }, { "ordinal": 14, + "name": "maybe_model_weight_creator_user_token: tokens::tokens::users::UserToken", + "type_info": { + "type": "VarString", + "flags": "UNIQUE_KEY | BINARY | NO_DEFAULT_VALUE", + "char_set": 224, + "max_size": 128 + } + }, + { + "ordinal": 15, + "name": "maybe_model_weight_creator_username", + "type_info": { + "type": "VarString", + "flags": "UNIQUE_KEY | BINARY | NO_DEFAULT_VALUE", + "char_set": 224, + "max_size": 80 + } + }, + { + "ordinal": 16, + "name": "maybe_model_weight_creator_display_name", + "type_info": { + "type": "VarString", + "flags": "BINARY | NO_DEFAULT_VALUE", + "char_set": 224, + "max_size": 80 + } + }, + { + "ordinal": 17, + "name": "maybe_model_weight_creator_gravatar_hash", + "type_info": { + "type": "String", + "flags": "BINARY | NO_DEFAULT_VALUE", + "char_set": 224, + "max_size": 128 + } + }, + { + "ordinal": 18, + "name": "public_bucket_directory_hash", + "type_info": { + "type": "VarString", + "flags": "NOT_NULL | BINARY | NO_DEFAULT_VALUE", + "char_set": 224, + "max_size": 128 + } + }, + { + "ordinal": 19, + "name": "maybe_public_bucket_prefix", + "type_info": { + "type": "VarString", + "flags": "BINARY", + "char_set": 224, + "max_size": 64 + } + }, + { + "ordinal": 20, + "name": "maybe_public_bucket_extension", + "type_info": { + "type": "VarString", + "flags": "BINARY", + "char_set": 224, + "max_size": 64 + } + }, + { + "ordinal": 21, "name": "created_at", "type_info": { "type": "Timestamp", @@ -154,7 +224,7 @@ } }, { - "ordinal": 15, + "ordinal": 22, "name": "updated_at", "type_info": { "type": "Timestamp", @@ -179,6 +249,13 @@ true, true, true, + true, + true, + true, + true, + true, + true, + true, false, true, true, @@ -186,5 +263,5 @@ false ] }, - "hash": "59b2bf500a8f32919d08db935e01fbb2723d5356d3f045ca18889c9317589edd" + "hash": "58648783cb376fc7ad093ff50a8a7bcb3c55fe57b2ad7d3ebbbdbc63573069ba" } 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 b2c38b6e1..16e989fb0 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 @@ -39,6 +39,15 @@ pub struct MediaFile { pub maybe_model_weights_type: Option, pub maybe_model_weights_category: Option, + pub maybe_model_cover_image_public_bucket_hash: Option, + pub maybe_model_cover_image_public_bucket_prefix: Option, + pub maybe_model_cover_image_public_bucket_extension: Option, + + pub maybe_model_weight_creator_user_token: Option, + pub maybe_model_weight_creator_username: Option, + pub maybe_model_weight_creator_display_name: Option, + pub maybe_model_weight_creator_gravatar_hash: Option, + pub public_bucket_directory_hash: String, pub maybe_public_bucket_prefix: Option, pub maybe_public_bucket_extension: Option, @@ -81,6 +90,15 @@ pub struct MediaFileRaw { pub maybe_model_weights_type: Option, pub maybe_model_weights_category: Option, + pub maybe_model_cover_image_public_bucket_hash: Option, + pub maybe_model_cover_image_public_bucket_prefix: Option, + pub maybe_model_cover_image_public_bucket_extension: Option, + + pub maybe_model_weight_creator_user_token: Option, + pub maybe_model_weight_creator_username: Option, + pub maybe_model_weight_creator_display_name: Option, + pub maybe_model_weight_creator_gravatar_hash: Option, + pub public_bucket_directory_hash: String, pub maybe_public_bucket_prefix: Option, pub maybe_public_bucket_extension: Option, @@ -126,6 +144,13 @@ pub async fn get_media_file( maybe_model_weights_title: record.maybe_model_weights_title, maybe_model_weights_type: record.maybe_model_weights_type, maybe_model_weights_category: record.maybe_model_weights_category, + maybe_model_cover_image_public_bucket_hash: record.maybe_model_cover_image_public_bucket_hash, + maybe_model_cover_image_public_bucket_prefix: record.maybe_model_cover_image_public_bucket_prefix, + maybe_model_cover_image_public_bucket_extension: record.maybe_model_cover_image_public_bucket_extension, + maybe_model_weight_creator_user_token: record.maybe_model_weight_creator_user_token, + maybe_model_weight_creator_username: record.maybe_model_weight_creator_username, + maybe_model_weight_creator_display_name: record.maybe_model_weight_creator_display_name, + maybe_model_weight_creator_gravatar_hash: record.maybe_model_weight_creator_gravatar_hash, public_bucket_directory_hash: record.public_bucket_directory_hash, maybe_public_bucket_prefix: record.maybe_public_bucket_prefix, maybe_public_bucket_extension: record.maybe_public_bucket_extension, @@ -158,6 +183,15 @@ 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_creator.token as `maybe_model_weight_creator_user_token: tokens::tokens::users::UserToken`, + model_weight_creator.username as maybe_model_weight_creator_username, + model_weight_creator.display_name as maybe_model_weight_creator_display_name, + model_weight_creator.email_gravatar_hash as maybe_model_weight_creator_gravatar_hash, + m.public_bucket_directory_hash, m.maybe_public_bucket_prefix, m.maybe_public_bucket_extension, @@ -170,6 +204,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 users as model_weight_creator + ON model_weight_creator.token = model_weights.creator_user_token WHERE m.token = ? "#, @@ -203,6 +241,15 @@ 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_creator.token as `maybe_model_weight_creator_user_token: tokens::tokens::users::UserToken`, + model_weight_creator.username as maybe_model_weight_creator_username, + model_weight_creator.display_name as maybe_model_weight_creator_display_name, + model_weight_creator.email_gravatar_hash as maybe_model_weight_creator_gravatar_hash, + m.public_bucket_directory_hash, m.maybe_public_bucket_prefix, m.maybe_public_bucket_extension, @@ -215,6 +262,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 users as model_weight_creator + ON model_weight_creator.token = model_weights.creator_user_token WHERE m.token = ? AND m.user_deleted_at IS NULL diff --git a/crates/service/web/storyteller_web/src/api_doc.rs b/crates/service/web/storyteller_web/src/api_doc.rs index a39f6cf01..d1bbdb0c9 100644 --- a/crates/service/web/storyteller_web/src/api_doc.rs +++ b/crates/service/web/storyteller_web/src/api_doc.rs @@ -64,18 +64,33 @@ use crate::http_server::web_utils::response_success_helpers::*; ), components(schemas( // Tokens + InferenceJobToken, MediaFileToken, ModelWeightToken, + UserBookmarkToken, UserToken, - // Common - SimpleGenericJsonSuccess,Visibility, - PaginationCursors,PaginationPage, + + // Enums + MediaFileOriginCategory, + MediaFileOriginModelType, + MediaFileOriginProductCategory, + MediaFileType, + WeightsCategory, + WeightsType, + + // Common response structs + DefaultAvatarInfo, + PaginationCursors, + PaginationPage, + SimpleGenericJsonSuccess, + UserDetailsLight, + Visibility, + // Inference - EnqueueTTSRequest,EnqueueTTSRequestSuccessResponse,EnqueueTTSRequestError,InferenceJobToken, + EnqueueTTSRequest,EnqueueTTSRequestSuccessResponse,EnqueueTTSRequestError, // Media Files GetMediaFilePathInfo,GetMediaFileError,GetMediaFileSuccessResponse,GetMediaFileModelInfo,MediaFileInfo, // Model Weights - WeightsCategory,WeightsType, GetWeightPathInfo,GetWeightResponse,GetWeightError, UpdateWeightRequest,UpdateWeightRequest,UpdateWeightPathInfo,UpdateWeightRequest,UpdateWeightError, SetModelWeightCoverImageRequest,SetModelWeightCoverImageResponse,SetModelWeightCoverImagePathInfo,SetModelWeightCoverImageError, @@ -84,15 +99,13 @@ use crate::http_server::web_utils::response_success_helpers::*; ListWeightError,ModelWeightForList,ListWeightError, ListAvailableWeightsQuery,ListAvailableWeightsSuccessResponse,ModelWeightForList, ListWeightsByUserError,ListWeightsByUserSuccessResponse,ListWeightsByUserPathInfo,Weight, - UserDetailsLight,DefaultAvatarInfo, WeightsData,MediaFileData, - MediaFileOriginModelType,MediaFileOriginProductCategory,MediaFileOriginCategory, - ListFeaturedMediaFilesSuccessResponse,MediaFile,MediaFileType, ListFeaturedMediaFilesError, + ListFeaturedMediaFilesSuccessResponse,MediaFile, ListFeaturedMediaFilesError, ListMediaFilesSuccessResponse, ListMediaFilesError, MediaFileListItem, ListMediaFilesQueryParams, MediaFileSocialMetaLight, ListMediaFilesForUserSuccessResponse,ListMediaFilesForUserQueryParams,ListMediaFilesForUserError,ListMediaFilesForUserPathInfo, MediaFileForUserListItem, MediaFileForUserListItem, - UserBookmarkToken,UserBookmarkDetailsForUserList,UserBookmarkEntityType, + UserBookmarkDetailsForUserList,UserBookmarkEntityType, CreateUserBookmarkRequest,CreateUserBookmarkError,CreateUserBookmarkSuccessResponse, DeleteUserBookmarkPathInfo,DeleteUserBookmarkError,DeleteUserBookmarkRequest, ListUserBookmarksPathInfo,ListUserBookmarksForUserError,ListUserBookmarksForUserSuccessResponse,UserBookmarkListItem, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/get_media_file.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/get_media_file.rs index bf9b7826a..7d3072a83 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/get_media_file.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/get_media_file.rs @@ -56,7 +56,6 @@ pub struct MediaFileInfo { /// Possible model info (if generated by inference) pub maybe_model_weight_info: Option, - /// User info pub maybe_creator_user: Option, @@ -84,10 +83,18 @@ pub struct MediaFileInfo { #[derive(Serialize, ToSchema)] pub struct GetMediaFileModelInfo { - pub token: ModelWeightToken, + pub weight_token: ModelWeightToken, pub weight_type: WeightsType, pub weight_category: WeightsCategory, pub title: String, + + /// Cover images are small descriptive images that can be set for any model. + /// If a cover image is set, this is the path to the asset. + pub maybe_cover_image_public_bucket_path: Option, + + /// NB: Technically this shouldn't be a nullable field, but since there are so many + /// joins we'll relax that this must exist (for now). + pub maybe_weight_creator: Option, } #[derive(Debug, ToSchema)] @@ -220,6 +227,19 @@ async fn modern_media_file_lookup( .get_full_object_path_str() .to_string(); + let maybe_cover_image_public_bucket_path = match result.maybe_model_cover_image_public_bucket_hash + .as_deref() + { + None => None, + Some(hash) => Some(MediaFileBucketPath::from_object_hash( + &hash, + result.maybe_model_cover_image_public_bucket_prefix.as_deref(), + result.maybe_model_cover_image_public_bucket_extension.as_deref()) + .get_full_object_path_str() + .to_string() + ) + }; + Ok(GetMediaFileSuccessResponse { success: true, media_file: MediaFileInfo { @@ -229,12 +249,19 @@ async fn modern_media_file_lookup( maybe_model_weight_info: match result.maybe_model_weights_token { None => None, Some(weight_token) => Some(GetMediaFileModelInfo { - token: weight_token, + 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: result.maybe_model_weights_type.unwrap_or(WeightsType::Tacotron2), weight_category: 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( + result.maybe_model_weight_creator_user_token, + result.maybe_model_weight_creator_username, + result.maybe_model_weight_creator_display_name, + result.maybe_model_weight_creator_gravatar_hash, + ), }) }, maybe_creator_user: UserDetailsLight::from_optional_db_fields_owned( @@ -300,10 +327,12 @@ async fn emulate_media_file_with_legacy_tts_result_lookup( public_bucket_path, maybe_model_weight_info: Some(GetMediaFileModelInfo { // NB: These should be reasonable synthetic defaults for emulated TT2 results, even the "ModelWeightToken". - token: ModelWeightToken::new_from_str(&result.tts_model_token), + weight_token: ModelWeightToken::new_from_str(&result.tts_model_token), weight_type: WeightsType::Tacotron2, weight_category: WeightsCategory::TextToSpeech, title: result.tts_model_title.unwrap_or_else(|| "tacotron2 model".to_string()), + maybe_cover_image_public_bucket_path: None, + maybe_weight_creator: None, // NB: Not worth the trouble of synthesizing this }), maybe_creator_user: UserDetailsLight::from_optional_db_fields_owned( result.maybe_creator_user_token,