mirror of
https://github.com/storytold/artcraft.git
synced 2026-11-06 02:00:46 +00:00
add stats on all endpoints
This commit is contained in:
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")?,
|
||||
})
|
||||
|
||||
+8
@@ -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,
|
||||
}
|
||||
|
||||
+8
@@ -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,
|
||||
|
||||
+1
@@ -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,
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user