add stats on all endpoints

This commit is contained in:
Brandon Thomas committed 2024-01-09 23:11:24 -05:00
1 parent c07e71b8c3
commit 9f54bfe0ab
5 files changed
+72

No files matched your search

@@ -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<u32>,
pub maybe_ratings_negative_count: Option<u32>,
pub maybe_bookmark_count: Option<u32>,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
}
@@ -102,6 +109,9 @@ pub async fn list_media_files(args: ListMediaFilesArgs<'_>) -> AnyhowResult<Medi
creator_set_visibility: record.creator_set_visibility,
comment_count: record.comment_count as u64,
favorite_count: record.favorite_count as u64,
maybe_ratings_positive_count: record.maybe_ratings_positive_count,
maybe_ratings_negative_count: record.maybe_ratings_negative_count,
maybe_bookmark_count: record.maybe_bookmark_count,
created_at: record.created_at,
updated_at: record.updated_at,
}
@@ -150,6 +160,11 @@ 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,
m.created_at,
m.updated_at,
@@ -165,6 +180,9 @@ LEFT OUTER JOIN favorites as f
ON f.entity_type = 'media_file' AND f.entity_token = m.token
LEFT OUTER JOIN comments as c
ON c.entity_type = 'media_file' AND c.entity_token = c.token
LEFT OUTER JOIN entity_stats
ON entity_stats.entity_type = "media_file"
AND entity_stats.entity_token = m.token
"#
);
@@ -267,6 +285,10 @@ struct MediaFileListItemInternal {
comment_count: i64,
favorite_count: i64,
maybe_ratings_positive_count: Option<u32>,
maybe_ratings_negative_count: Option<u32>,
maybe_bookmark_count: Option<u32>,
created_at: DateTime<Utc>,
updated_at: DateTime<Utc>,
}
@@ -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")?,
})
}
}
@@ -31,6 +31,10 @@ pub struct MediaFilesByTokensRecord {
pub maybe_creator_display_name: Option<String>,
pub maybe_creator_email_gravatar_hash: Option<String>,
pub maybe_ratings_positive_count: Option<u32>,
pub maybe_ratings_negative_count: Option<u32>,
pub maybe_bookmark_count: Option<u32>,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
}
@@ -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<RawMediaFileJoinUser>) -> Vec<MediaFilesByToke
maybe_creator_display_name: media_file.maybe_creator_display_name,
maybe_creator_email_gravatar_hash: media_file.maybe_creator_email_gravatar_hash,
maybe_ratings_positive_count: media_file.maybe_ratings_positive_count,
maybe_ratings_negative_count: media_file.maybe_ratings_negative_count,
maybe_bookmark_count: media_file.maybe_bookmark_count,
media_type: media_file.media_type,
public_bucket_directory_hash: media_file.public_bucket_directory_hash,
maybe_public_bucket_prefix: media_file.maybe_public_bucket_prefix,
maybe_public_bucket_extension: media_file.maybe_public_bucket_extension,
@@ -194,6 +217,10 @@ fn map_to_media_files(dataset:Vec<RawMediaFileJoinUser>) -> Vec<MediaFilesByToke
pub maybe_public_bucket_prefix: Option<String>,
pub maybe_public_bucket_extension: Option<String>,
pub maybe_ratings_positive_count: Option<u32>,
pub maybe_ratings_negative_count: Option<u32>,
pub maybe_bookmark_count: Option<u32>,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
}
@@ -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")?,
})
@@ -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<UserDetailsLight>,
/// Statistics about the media file
pub stats: SimpleEntityStats,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
}
@@ -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,
}
@@ -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<UserDetailsLight>,
pub maybe_social_meta: Option<MediaFileSocialMetaLight>,
/// Statistics about the media file
pub stats: SimpleEntityStats,
pub creator_set_visibility: Visibility,
pub created_at: DateTime<Utc>,
@@ -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,
@@ -93,6 +93,7 @@ pub struct UserBookmarkDetailsForUserList {
/// This is only populated if the item is a model weight.
pub maybe_weight_data: Option<WeightsData>,
/// Statistics about the bookmarked item
pub stats: SimpleEntityStats,
}