mirror of
https://github.com/storytold/artcraft.git
synced 2026-11-05 01:38:44 +00:00
add creator details to user bookmarks (for weights, media files)
This commit is contained in:
1 parent
1bf58b01e1
commit
3c1cba1fad
3 files changed
+77
No files matched your search
@@ -55,12 +55,20 @@ fn select_result_fields() -> &'static str {
|
||||
media_files.public_bucket_directory_hash as maybe_media_file_public_bucket_hash,
|
||||
media_files.maybe_public_bucket_prefix as maybe_media_file_public_bucket_prefix,
|
||||
media_files.maybe_public_bucket_extension as maybe_media_file_public_bucket_extension,
|
||||
media_file_creator.token as maybe_media_file_creator_user_token,
|
||||
media_file_creator.username as maybe_media_file_creator_username,
|
||||
media_file_creator.display_name as maybe_media_file_creator_display_name,
|
||||
media_file_creator.email_gravatar_hash as maybe_media_file_creator_gravatar_hash,
|
||||
|
||||
model_weights.weights_type as maybe_model_weight_type,
|
||||
model_weights.weights_category as maybe_model_weight_category,
|
||||
media_file_cover_images.public_bucket_directory_hash as maybe_model_weight_cover_image_public_bucket_hash,
|
||||
media_file_cover_images.maybe_public_bucket_prefix as maybe_model_weight_cover_image_public_bucket_prefix,
|
||||
media_file_cover_images.maybe_public_bucket_extension as maybe_model_weight_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,
|
||||
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,
|
||||
|
||||
model_weights.title as maybe_descriptive_text_model_weight_title,
|
||||
tts_models.title as maybe_descriptive_text_tts_model_title,
|
||||
@@ -98,8 +106,13 @@ JOIN users AS u
|
||||
LEFT OUTER JOIN model_weights ON model_weights.token = f.entity_token
|
||||
LEFT OUTER JOIN media_files AS media_file_cover_images
|
||||
ON model_weights.maybe_cover_image_media_file_token = media_file_cover_images.token
|
||||
LEFT OUTER JOIN users as model_weight_creator
|
||||
ON model_weights.creator_user_token = model_weight_creator.token
|
||||
|
||||
LEFT OUTER JOIN media_files ON media_files.token = f.entity_token
|
||||
LEFT OUTER JOIN users as media_file_creator
|
||||
ON media_files.maybe_creator_user_token = media_file_creator.token
|
||||
|
||||
LEFT OUTER JOIN tts_models ON tts_models.token = f.entity_token
|
||||
LEFT OUTER JOIN tts_results ON tts_results.token = f.entity_token
|
||||
LEFT OUTER JOIN users ON users.token = f.entity_token
|
||||
|
||||
@@ -22,6 +22,11 @@ pub struct UserBookmark {
|
||||
pub maybe_media_file_public_bucket_prefix: Option<String>,
|
||||
pub maybe_media_file_public_bucket_extension: Option<String>,
|
||||
|
||||
pub maybe_media_file_creator_user_token: Option<UserToken>,
|
||||
pub maybe_media_file_creator_username: Option<String>,
|
||||
pub maybe_media_file_creator_display_name: Option<String>,
|
||||
pub maybe_media_file_creator_gravatar_hash: Option<String>,
|
||||
|
||||
/// Something descriptive about the bookmarked entity.
|
||||
/// This might be TTS text, a username, etc. It depends on the entity type.
|
||||
pub maybe_entity_descriptive_text: Option<String>,
|
||||
@@ -42,6 +47,12 @@ pub struct UserBookmark {
|
||||
/// Only set if the bookmark is of a media_files record *AND* the model has a cover image.
|
||||
pub maybe_model_weight_cover_image_public_bucket_extension: Option<String>,
|
||||
|
||||
pub maybe_model_weight_creator_user_token: Option<UserToken>,
|
||||
pub maybe_model_weight_creator_username: Option<String>,
|
||||
pub maybe_model_weight_creator_display_name: Option<String>,
|
||||
pub maybe_model_weight_creator_gravatar_hash: Option<String>,
|
||||
|
||||
// TODO(bt,2023-12-30): I don't think these user fields are necessary.
|
||||
pub user_token: UserToken,
|
||||
pub username: String,
|
||||
pub user_display_name: String,
|
||||
@@ -58,6 +69,7 @@ pub struct RawUserBookmarkRecord {
|
||||
pub (crate) entity_type: UserBookmarkEntityType,
|
||||
pub (crate) entity_token: String,
|
||||
|
||||
// TODO(bt,2023-12-30): I don't think these user fields are necessary.
|
||||
pub (crate) user_token: UserToken,
|
||||
pub (crate) username: String,
|
||||
pub (crate) user_display_name: String,
|
||||
@@ -73,6 +85,11 @@ pub struct RawUserBookmarkRecord {
|
||||
pub (crate) maybe_media_file_public_bucket_prefix: Option<String>,
|
||||
pub (crate) maybe_media_file_public_bucket_extension: Option<String>,
|
||||
|
||||
pub (crate) maybe_media_file_creator_user_token: Option<UserToken>,
|
||||
pub (crate) maybe_media_file_creator_username: Option<String>,
|
||||
pub (crate) maybe_media_file_creator_display_name: Option<String>,
|
||||
pub (crate) maybe_media_file_creator_gravatar_hash: Option<String>,
|
||||
|
||||
pub (crate) maybe_model_weight_type: Option<WeightsType>,
|
||||
pub (crate) maybe_model_weight_category: Option<WeightsCategory>,
|
||||
|
||||
@@ -80,6 +97,11 @@ pub struct RawUserBookmarkRecord {
|
||||
pub (crate) maybe_model_weight_cover_image_public_bucket_prefix: Option<String>,
|
||||
pub (crate) maybe_model_weight_cover_image_public_bucket_extension: Option<String>,
|
||||
|
||||
pub (crate) maybe_model_weight_creator_user_token: Option<UserToken>,
|
||||
pub (crate) maybe_model_weight_creator_username: Option<String>,
|
||||
pub (crate) maybe_model_weight_creator_display_name: Option<String>,
|
||||
pub (crate) maybe_model_weight_creator_gravatar_hash: Option<String>,
|
||||
|
||||
pub (crate) maybe_descriptive_text_model_weight_title: Option<String>,
|
||||
pub (crate) maybe_descriptive_text_tts_model_title: Option<String>,
|
||||
pub (crate) maybe_descriptive_text_tts_result_inference_text: Option<String>,
|
||||
@@ -98,6 +120,10 @@ impl RawUserBookmarkRecord {
|
||||
maybe_media_file_public_bucket_hash: self.maybe_media_file_public_bucket_hash,
|
||||
maybe_media_file_public_bucket_prefix: self.maybe_media_file_public_bucket_prefix,
|
||||
maybe_media_file_public_bucket_extension: self.maybe_media_file_public_bucket_extension,
|
||||
maybe_media_file_creator_user_token: self.maybe_media_file_creator_user_token,
|
||||
maybe_media_file_creator_username: self.maybe_media_file_creator_username,
|
||||
maybe_media_file_creator_display_name: self.maybe_media_file_creator_display_name,
|
||||
maybe_media_file_creator_gravatar_hash: self.maybe_media_file_creator_gravatar_hash,
|
||||
maybe_entity_descriptive_text: match self.entity_type {
|
||||
UserBookmarkEntityType::User => self.maybe_descriptive_text_user_display_name,
|
||||
UserBookmarkEntityType::ModelWeight => self.maybe_descriptive_text_model_weight_title,
|
||||
@@ -120,6 +146,10 @@ impl RawUserBookmarkRecord {
|
||||
maybe_model_weight_cover_image_public_bucket_hash: self.maybe_model_weight_cover_image_public_bucket_hash,
|
||||
maybe_model_weight_cover_image_public_bucket_prefix: self.maybe_model_weight_cover_image_public_bucket_prefix,
|
||||
maybe_model_weight_cover_image_public_bucket_extension: self.maybe_model_weight_cover_image_public_bucket_extension,
|
||||
maybe_model_weight_creator_user_token: self.maybe_model_weight_creator_user_token,
|
||||
maybe_model_weight_creator_username: self.maybe_model_weight_creator_username,
|
||||
maybe_model_weight_creator_display_name: self.maybe_model_weight_creator_display_name,
|
||||
maybe_model_weight_creator_gravatar_hash: self.maybe_model_weight_creator_gravatar_hash,
|
||||
user_token: self.user_token,
|
||||
username: self.username,
|
||||
user_display_name: self.user_display_name,
|
||||
@@ -149,11 +179,19 @@ impl FromRow<'_, MySqlRow> for RawUserBookmarkRecord {
|
||||
maybe_media_file_public_bucket_hash: row.try_get("maybe_media_file_public_bucket_hash")?,
|
||||
maybe_media_file_public_bucket_prefix: row.try_get("maybe_media_file_public_bucket_prefix")?,
|
||||
maybe_media_file_public_bucket_extension: row.try_get("maybe_media_file_public_bucket_extension")?,
|
||||
maybe_media_file_creator_user_token: row.try_get("maybe_media_file_creator_user_token")?,
|
||||
maybe_media_file_creator_username: row.try_get("maybe_media_file_creator_username")?,
|
||||
maybe_media_file_creator_display_name: row.try_get("maybe_media_file_creator_display_name")?,
|
||||
maybe_media_file_creator_gravatar_hash: row.try_get("maybe_media_file_creator_gravatar_hash")?,
|
||||
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_model_weight_cover_image_public_bucket_hash: row.try_get("maybe_model_weight_cover_image_public_bucket_hash")?,
|
||||
maybe_model_weight_cover_image_public_bucket_prefix: row.try_get("maybe_model_weight_cover_image_public_bucket_prefix")?,
|
||||
maybe_model_weight_cover_image_public_bucket_extension: row.try_get("maybe_model_weight_cover_image_public_bucket_extension")?,
|
||||
maybe_model_weight_creator_user_token: row.try_get("maybe_model_weight_creator_user_token")?,
|
||||
maybe_model_weight_creator_username: row.try_get("maybe_model_weight_creator_username")?,
|
||||
maybe_model_weight_creator_display_name: row.try_get("maybe_model_weight_creator_display_name")?,
|
||||
maybe_model_weight_creator_gravatar_hash: row.try_get("maybe_model_weight_creator_gravatar_hash")?,
|
||||
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")?,
|
||||
|
||||
+26
@@ -23,6 +23,7 @@ use mysql_queries::queries::user_bookmarks::list_user_bookmarks::{list_user_book
|
||||
use tokens::tokens::user_bookmarks::UserBookmarkToken;
|
||||
|
||||
use crate::http_server::common_responses::pagination_page::PaginationPage;
|
||||
use crate::http_server::common_responses::user_details_lite::UserDetailsLight;
|
||||
use crate::http_server::web_utils::response_error_helpers::to_simple_json_error;
|
||||
use crate::server_state::ServerState;
|
||||
|
||||
@@ -98,6 +99,9 @@ pub struct MediaFileData {
|
||||
|
||||
/// URL to the media file.
|
||||
pub public_bucket_path: String,
|
||||
|
||||
/// Creator of the media file
|
||||
pub maybe_creator: Option<UserDetailsLight>,
|
||||
}
|
||||
|
||||
#[derive(Serialize, ToSchema)]
|
||||
@@ -109,6 +113,11 @@ pub struct WeightsData {
|
||||
/// 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<String>,
|
||||
|
||||
/// Creator of the weight
|
||||
/// NB: Technically this should not be optional, but since the join is
|
||||
/// incredibly telescopic, we may as well make it optional for now.
|
||||
pub maybe_creator: Option<UserDetailsLight>,
|
||||
}
|
||||
|
||||
#[derive(Debug, ToSchema)]
|
||||
@@ -197,6 +206,7 @@ pub async fn list_user_bookmarks_for_user_handler(
|
||||
.get_full_object_path_str()
|
||||
.to_string()
|
||||
});
|
||||
|
||||
let maybe_model_weight_cover_image = user_bookmark.maybe_model_weight_cover_image_public_bucket_hash
|
||||
.as_deref()
|
||||
.map(|hash| {
|
||||
@@ -208,6 +218,20 @@ pub async fn list_user_bookmarks_for_user_handler(
|
||||
.to_string()
|
||||
});
|
||||
|
||||
let maybe_media_file_creator = UserDetailsLight::from_optional_db_fields(
|
||||
user_bookmark.maybe_media_file_creator_user_token.as_ref(),
|
||||
user_bookmark.maybe_media_file_creator_username.as_deref(),
|
||||
user_bookmark.maybe_media_file_creator_display_name.as_deref(),
|
||||
user_bookmark.maybe_media_file_creator_gravatar_hash.as_deref(),
|
||||
);
|
||||
|
||||
let maybe_model_weight_creator = UserDetailsLight::from_optional_db_fields(
|
||||
user_bookmark.maybe_model_weight_creator_user_token.as_ref(),
|
||||
user_bookmark.maybe_model_weight_creator_username.as_deref(),
|
||||
user_bookmark.maybe_model_weight_creator_display_name.as_deref(),
|
||||
user_bookmark.maybe_model_weight_creator_gravatar_hash.as_deref(),
|
||||
);
|
||||
|
||||
UserBookmarkListItem {
|
||||
token: user_bookmark.token,
|
||||
details: UserBookmarkDetailsForUserList {
|
||||
@@ -219,6 +243,7 @@ pub async fn list_user_bookmarks_for_user_handler(
|
||||
// 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),
|
||||
public_bucket_path: path,
|
||||
maybe_creator: maybe_media_file_creator,
|
||||
}),
|
||||
},
|
||||
maybe_weight_data: match user_bookmark.entity_type {
|
||||
@@ -228,6 +253,7 @@ pub async fn list_user_bookmarks_for_user_handler(
|
||||
weight_type: user_bookmark.maybe_model_weight_type.unwrap_or(WeightsType::Tacotron2),
|
||||
weight_category: user_bookmark.maybe_model_weight_category.unwrap_or(WeightsCategory::TextToSpeech),
|
||||
maybe_cover_image_public_bucket_path: maybe_model_weight_cover_image,
|
||||
maybe_creator: maybe_model_weight_creator,
|
||||
}),
|
||||
_ => None,
|
||||
},
|
||||
|
||||
Reference in new issue
Block a user