cover image in list endpoints

This commit is contained in:
Brandon Thomas committed 2024-04-17 13:59:58 -04:00
1 parent 1d690a2c6f
commit 8eb2d45660
4 files changed
+54 -4

No files matched your search

@@ -1,8 +1,8 @@
use chrono::{DateTime, Utc};
use sqlx::{FromRow, MySql, MySqlPool, QueryBuilder, Row};
use sqlx::mysql::MySqlRow;
use enums::by_table::media_files::media_file_class::MediaFileClass;
use enums::by_table::media_files::media_file_class::MediaFileClass;
use enums::by_table::media_files::media_file_origin_category::MediaFileOriginCategory;
use enums::by_table::media_files::media_file_origin_model_type::MediaFileOriginModelType;
use enums::by_table::media_files::media_file_origin_product_category::MediaFileOriginProductCategory;
@@ -55,6 +55,10 @@ pub struct MediaFileListItem {
pub creator_set_visibility: Visibility,
pub maybe_file_cover_image_public_bucket_hash: Option<String>,
pub maybe_file_cover_image_public_bucket_prefix: Option<String>,
pub maybe_file_cover_image_public_bucket_extension: Option<String>,
#[deprecated(note = "more expensive to query")]
pub comment_count: u64,
@@ -121,6 +125,9 @@ pub async fn list_media_files(args: ListMediaFilesArgs<'_>) -> AnyhowResult<Medi
maybe_title: record.maybe_title,
maybe_text_transcript: record.maybe_text_transcript,
creator_set_visibility: record.creator_set_visibility,
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,
comment_count: record.comment_count as u64,
favorite_count: record.favorite_count as u64,
maybe_ratings_positive_count: record.maybe_ratings_positive_count,
@@ -177,13 +184,16 @@ SELECT
u.display_name as maybe_creator_display_name,
u.email_gravatar_hash as maybe_creator_gravatar_hash,
entity_stats.ratings_positive_count as maybe_ratings_positive_count,
entity_stats.ratings_negative_count as maybe_ratings_negative_count,
entity_stats.bookmark_count as maybe_bookmark_count,
m.creator_set_visibility,
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.maybe_title,
m.maybe_text_transcript,
@@ -197,6 +207,8 @@ FROM media_files AS m
LEFT OUTER JOIN users AS u
ON m.maybe_creator_user_token = u.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 model_weights as w
ON m.maybe_origin_model_token = w.token
LEFT OUTER JOIN favorites as f
@@ -317,6 +329,10 @@ struct MediaFileListItemInternal {
creator_set_visibility: Visibility,
maybe_file_cover_image_public_bucket_hash: Option<String>,
maybe_file_cover_image_public_bucket_prefix: Option<String>,
maybe_file_cover_image_public_bucket_extension: Option<String>,
comment_count: i64,
favorite_count: i64,
@@ -366,6 +382,9 @@ impl FromRow<'_, MySqlRow> for MediaFileListItemInternal {
maybe_creator_display_name: row.try_get("maybe_creator_display_name")?,
maybe_creator_gravatar_hash: row.try_get("maybe_creator_gravatar_hash")?,
creator_set_visibility: Visibility::try_from_mysql_row(row, "creator_set_visibility")?,
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_title: row.try_get("maybe_title")?,
maybe_text_transcript: row.try_get("maybe_text_transcript")?,
created_at: row.try_get("created_at")?,
@@ -44,6 +44,10 @@ pub struct MediaFilesByTokensRecord {
/// Text transcripts for TTS, etc.
pub maybe_text_transcript: Option<String>,
pub maybe_file_cover_image_public_bucket_hash: Option<String>,
pub maybe_file_cover_image_public_bucket_prefix: Option<String>,
pub maybe_file_cover_image_public_bucket_extension: Option<String>,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
}
@@ -146,6 +150,10 @@ async fn get_raw_media_files_by_tokens(
entity_stats.ratings_negative_count as maybe_ratings_negative_count,
entity_stats.bookmark_count as maybe_bookmark_count,
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.created_at,
m.updated_at
@@ -157,6 +165,8 @@ async fn get_raw_media_files_by_tokens(
LEFT OUTER JOIN entity_stats
ON entity_stats.entity_type = "media_file"
AND entity_stats.entity_token = m.token
LEFT OUTER JOIN media_files as media_file_cover_image
ON media_file_cover_image.token = m.maybe_cover_image_media_file_token
WHERE
m.creator_set_visibility = "public"
AND m.user_deleted_at IS NULL
@@ -218,6 +228,10 @@ fn map_to_media_files(dataset:Vec<RawMediaFileJoinUser>) -> Vec<MediaFilesByToke
maybe_title: media_file.maybe_title,
maybe_text_transcript: media_file.maybe_text_transcript,
maybe_file_cover_image_public_bucket_hash: media_file.maybe_file_cover_image_public_bucket_hash,
maybe_file_cover_image_public_bucket_prefix: media_file.maybe_file_cover_image_public_bucket_prefix,
maybe_file_cover_image_public_bucket_extension: media_file.maybe_file_cover_image_public_bucket_extension,
created_at: media_file.created_at,
updated_at: media_file.updated_at,
}
@@ -256,6 +270,10 @@ fn map_to_media_files(dataset:Vec<RawMediaFileJoinUser>) -> Vec<MediaFilesByToke
pub maybe_title: Option<String>,
pub maybe_text_transcript: Option<String>,
pub maybe_file_cover_image_public_bucket_hash: Option<String>,
pub maybe_file_cover_image_public_bucket_prefix: Option<String>,
pub maybe_file_cover_image_public_bucket_extension: Option<String>,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
}
@@ -295,6 +313,9 @@ impl FromRow<'_, MySqlRow> for RawMediaFileJoinUser {
maybe_bookmark_count: row.try_get("maybe_bookmark_count")?,
maybe_title: row.try_get("maybe_title")?,
maybe_text_transcript: row.try_get("maybe_text_transcript")?,
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")?,
created_at: row.try_get("created_at")?,
updated_at: row.try_get("updated_at")?,
})
@@ -166,7 +166,12 @@ pub async fn list_featured_media_files_handler(
token: m.token.clone(),
media_type: m.media_type,
public_bucket_path,
cover_image: MediaFileCoverImageDetails::from_token(&m.token),
cover_image: MediaFileCoverImageDetails::from_optional_db_fields(
&m.token,
m.maybe_file_cover_image_public_bucket_hash.as_deref(),
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(
m.origin_category,
m.origin_product_category,
@@ -245,7 +245,12 @@ pub async fn list_media_files_handler(
record.maybe_public_bucket_extension.as_deref())
.get_full_object_path_str()
.to_string(),
cover_image: MediaFileCoverImageDetails::from_token(&record.token),
cover_image: MediaFileCoverImageDetails::from_optional_db_fields(
&record.token,
record.maybe_file_cover_image_public_bucket_hash.as_deref(),
record.maybe_file_cover_image_public_bucket_prefix.as_deref(),
record.maybe_file_cover_image_public_bucket_extension.as_deref(),
),
maybe_creator: UserDetailsLight::from_optional_db_fields_owned(
record.maybe_creator_user_token,
record.maybe_creator_username,