From 9f54bfe0abac57b03e2f656a60364118e83ce8ed Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Tue, 9 Jan 2024 22:59:39 -0500 Subject: [PATCH] add stats on all endpoints --- .../media_files/list/list_media_files.rs | 25 ++++++++++++++++ .../list/list_media_files_by_tokens.rs | 30 +++++++++++++++++++ .../media_files/list_featured_media_files.rs | 8 +++++ .../endpoints/media_files/list_media_files.rs | 8 +++++ .../list_user_bookmarks_for_user_handler.rs | 1 + 5 files changed, 72 insertions(+) diff --git a/crates/lib/mysql_queries/src/queries/media_files/list/list_media_files.rs b/crates/lib/mysql_queries/src/queries/media_files/list/list_media_files.rs index 20a99c2dfd..447a106c90 100644 --- a/crates/lib/mysql_queries/src/queries/media_files/list/list_media_files.rs +++ b/crates/lib/mysql_queries/src/queries/media_files/list/list_media_files.rs @@ -45,9 +45,16 @@ pub struct MediaFileListItem { pub creator_set_visibility: Visibility, + #[deprecated(note = "more expensive to query")] pub comment_count: u64, + + #[deprecated(note = "more expensive to query")] pub favorite_count: u64, + pub maybe_ratings_positive_count: Option, + pub maybe_ratings_negative_count: Option, + pub maybe_bookmark_count: Option, + pub created_at: DateTime, pub updated_at: DateTime, } @@ -102,6 +109,9 @@ pub async fn list_media_files(args: ListMediaFilesArgs<'_>) -> AnyhowResult, + maybe_ratings_negative_count: Option, + maybe_bookmark_count: Option, + created_at: DateTime, updated_at: DateTime, } @@ -308,6 +330,9 @@ impl FromRow<'_, MySqlRow> for MediaFileListItemInternal { updated_at: row.try_get("updated_at")?, comment_count: row.try_get("comment_count")?, favorite_count: row.try_get("favorite_count")?, + maybe_ratings_positive_count: row.try_get("maybe_ratings_positive_count")?, + maybe_ratings_negative_count: row.try_get("maybe_ratings_negative_count")?, + maybe_bookmark_count: row.try_get("maybe_bookmark_count")?, }) } } diff --git a/crates/lib/mysql_queries/src/queries/media_files/list/list_media_files_by_tokens.rs b/crates/lib/mysql_queries/src/queries/media_files/list/list_media_files_by_tokens.rs index d55cf8be87..7adb769287 100644 --- a/crates/lib/mysql_queries/src/queries/media_files/list/list_media_files_by_tokens.rs +++ b/crates/lib/mysql_queries/src/queries/media_files/list/list_media_files_by_tokens.rs @@ -31,6 +31,10 @@ pub struct MediaFilesByTokensRecord { pub maybe_creator_display_name: Option, pub maybe_creator_email_gravatar_hash: Option, + pub maybe_ratings_positive_count: Option, + pub maybe_ratings_negative_count: Option, + pub maybe_bookmark_count: Option, + pub created_at: DateTime, pub updated_at: DateTime, } @@ -76,12 +80,19 @@ async fn get_raw_media_files_by_tokens( m.maybe_public_bucket_prefix, m.maybe_public_bucket_extension, + 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.created_at, m.updated_at FROM media_files as m LEFT OUTER JOIN users ON users.token = m.maybe_creator_user_token + LEFT OUTER JOIN entity_stats + ON entity_stats.entity_type = "media_file" + AND entity_stats.entity_token = m.token WHERE m.creator_set_visibility = "public" AND m.token IN ( @@ -108,12 +119,19 @@ async fn get_raw_media_files_by_tokens( m.maybe_public_bucket_prefix, m.maybe_public_bucket_extension, + 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.created_at, m.updated_at FROM media_files as m LEFT OUTER JOIN users ON users.token = m.maybe_creator_user_token + LEFT OUTER JOIN entity_stats + ON entity_stats.entity_type = "media_file" + AND entity_stats.entity_token = m.token WHERE m.creator_set_visibility = "public" AND m.user_deleted_at IS NULL @@ -161,7 +179,12 @@ fn map_to_media_files(dataset:Vec) -> Vec) -> Vec, pub maybe_public_bucket_extension: Option, + pub maybe_ratings_positive_count: Option, + pub maybe_ratings_negative_count: Option, + pub maybe_bookmark_count: Option, + pub created_at: DateTime, pub updated_at: DateTime, } @@ -227,6 +254,9 @@ impl FromRow<'_, MySqlRow> for RawMediaFileJoinUser { public_bucket_directory_hash: row.try_get("public_bucket_directory_hash")?, maybe_public_bucket_prefix: row.try_get("maybe_public_bucket_prefix")?, maybe_public_bucket_extension: row.try_get("maybe_public_bucket_extension")?, + maybe_ratings_positive_count: row.try_get("maybe_ratings_positive_count")?, + maybe_ratings_negative_count: row.try_get("maybe_ratings_negative_count")?, + maybe_bookmark_count: row.try_get("maybe_bookmark_count")?, created_at: row.try_get("created_at")?, updated_at: row.try_get("updated_at")?, }) diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/list_featured_media_files.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/list_featured_media_files.rs index 55dbc6dd95..b5be212aa0 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/list_featured_media_files.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/list_featured_media_files.rs @@ -16,6 +16,7 @@ use enums::by_table::media_files::media_file_type::MediaFileType; use mysql_queries::queries::media_files::list::list_media_files_by_tokens::list_media_files_by_tokens; use tokens::tokens::media_files::MediaFileToken; +use crate::http_server::common_responses::simple_entity_stats::SimpleEntityStats; use crate::http_server::common_responses::user_details_lite::UserDetailsLight; use crate::server_state::ServerState; @@ -43,6 +44,9 @@ pub struct MediaFile { pub maybe_creator: Option, + /// Statistics about the media file + pub stats: SimpleEntityStats, + pub created_at: DateTime, pub updated_at: DateTime, } @@ -148,6 +152,10 @@ pub async fn list_featured_media_files_handler( m.maybe_creator_display_name, m.maybe_creator_email_gravatar_hash ), + stats: SimpleEntityStats { + positive_rating_count: m.maybe_ratings_positive_count.unwrap_or(0), + bookmark_count: m.maybe_bookmark_count.unwrap_or(0), + }, created_at: m.created_at, updated_at: m.updated_at, } diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/list_media_files.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/list_media_files.rs index aa2700ce1d..7efeb62a84 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/list_media_files.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/list_media_files.rs @@ -20,6 +20,7 @@ use tokens::tokens::media_files::MediaFileToken; use crate::http_server::common_responses::media_file_social_meta_lite::MediaFileSocialMetaLight; use crate::http_server::common_responses::pagination_cursors::PaginationCursors; +use crate::http_server::common_responses::simple_entity_stats::SimpleEntityStats; 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; @@ -58,6 +59,9 @@ pub struct MediaFileListItem { pub maybe_creator: Option, pub maybe_social_meta: Option, + /// Statistics about the media file + pub stats: SimpleEntityStats, + pub creator_set_visibility: Visibility, pub created_at: DateTime, @@ -212,6 +216,10 @@ pub async fn list_media_files_handler( record.favorite_count, record.comment_count, )), + stats: SimpleEntityStats { + positive_rating_count: record.maybe_ratings_positive_count.unwrap_or(0), + bookmark_count: record.maybe_bookmark_count.unwrap_or(0), + }, creator_set_visibility: record.creator_set_visibility, created_at: record.created_at, updated_at: record.updated_at, 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 efa4bac0a1..a1771118fe 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 @@ -93,6 +93,7 @@ pub struct UserBookmarkDetailsForUserList { /// This is only populated if the item is a model weight. pub maybe_weight_data: Option, + /// Statistics about the bookmarked item pub stats: SimpleEntityStats, }