From fff71d7aa420bc25be5253dc3472b2f7688dcc93 Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Thu, 19 Oct 2023 18:18:35 -0400 Subject: [PATCH] Enrich list dataset samples query + endpoint with bucket information --- ...list_dataset_samples_for_dataset_token.rs} | 48 +++++++++++++++---- .../voice_designer/voice_samples/mod.rs | 2 +- .../list_samples_by_dataset.rs | 37 +++++++++----- 3 files changed, 66 insertions(+), 21 deletions(-) rename crates/lib/mysql_queries/src/queries/voice_designer/voice_samples/{list_dataset_samples.rs => list_dataset_samples_for_dataset_token.rs} (64%) diff --git a/crates/lib/mysql_queries/src/queries/voice_designer/voice_samples/list_dataset_samples.rs b/crates/lib/mysql_queries/src/queries/voice_designer/voice_samples/list_dataset_samples_for_dataset_token.rs similarity index 64% rename from crates/lib/mysql_queries/src/queries/voice_designer/voice_samples/list_dataset_samples.rs rename to crates/lib/mysql_queries/src/queries/voice_designer/voice_samples/list_dataset_samples_for_dataset_token.rs index ae2e29d6ab..7548bea6c6 100644 --- a/crates/lib/mysql_queries/src/queries/voice_designer/voice_samples/list_dataset_samples.rs +++ b/crates/lib/mysql_queries/src/queries/voice_designer/voice_samples/list_dataset_samples_for_dataset_token.rs @@ -4,14 +4,24 @@ use log::warn; use sqlx::{MySql, MySqlPool}; use sqlx::pool::PoolConnection; +use enums::by_table::media_files::media_file_type::MediaFileType; use errors::AnyhowResult; +use tokens::tokens::media_files::MediaFileToken; use tokens::tokens::users::UserToken; use tokens::tokens::zs_voice_dataset_samples::ZsVoiceDatasetSampleToken; use tokens::tokens::zs_voice_datasets::ZsVoiceDatasetToken; pub struct DatasetSampleRecordForList { - pub token: ZsVoiceDatasetSampleToken, - pub dataset_token: ZsVoiceDatasetToken, + pub sample_token: ZsVoiceDatasetSampleToken, + + pub media_file_token: MediaFileToken, + pub media_type: MediaFileType, + + // Bucket path, prefix, and extension are all that are required to construct a path to + // download media from cloud buckets. + pub public_bucket_directory_hash: String, + pub maybe_public_bucket_prefix: Option, + pub maybe_public_bucket_extension: Option, pub maybe_creator_user_token: Option, @@ -21,7 +31,7 @@ pub struct DatasetSampleRecordForList { } -pub async fn list_samples( +pub async fn list_dataset_samples_for_dataset_token( dataset_token: &ZsVoiceDatasetToken, can_see_deleted: bool, mysql_pool: &MySqlPool, @@ -65,8 +75,12 @@ pub async fn list_samples_by_dataset_token_with_connection( Ok(records.into_iter() .map(|record| { DatasetSampleRecordForList { - token: record.token, - dataset_token: record.dataset_token, + sample_token: record.token, + media_file_token: record.media_file_token, + media_type: record.media_type, + public_bucket_directory_hash: record.public_bucket_directory_hash, + maybe_public_bucket_prefix: record.maybe_public_bucket_prefix, + maybe_public_bucket_extension: record.maybe_public_bucket_extension, maybe_creator_user_token: record.maybe_creator_user_token, created_at: record.created_at, updated_at: record.updated_at, @@ -87,11 +101,17 @@ async fn list_samples_by_dataset_token( r#" SELECT zds.token as `token: tokens::tokens::zs_voice_dataset_samples::ZsVoiceDatasetSampleToken`, - zds.dataset_token as `dataset_token: tokens::tokens::zs_voice_datasets::ZsVoiceDatasetToken`, + zds.media_file_token as `media_file_token: tokens::tokens::media_files::MediaFileToken`, + m.media_type as `media_type: enums::by_table::media_files::media_file_type::MediaFileType`, + m.public_bucket_directory_hash, + m.maybe_public_bucket_prefix, + m.maybe_public_bucket_extension, zds.maybe_creator_user_token as `maybe_creator_user_token: tokens::tokens::users::UserToken`, zds.created_at, zds.updated_at FROM zs_voice_dataset_samples as zds + JOIN media_files as m + ON zds.media_file_token = m.token WHERE zds.dataset_token = ? AND zds.user_deleted_at IS NULL AND zds.mod_deleted_at IS NULL @@ -104,11 +124,17 @@ async fn list_samples_by_dataset_token( r#" SELECT zds.token as `token: tokens::tokens::zs_voice_dataset_samples::ZsVoiceDatasetSampleToken`, - zds.dataset_token as `dataset_token: tokens::tokens::zs_voice_datasets::ZsVoiceDatasetToken`, + zds.media_file_token as `media_file_token: tokens::tokens::media_files::MediaFileToken`, + m.media_type as `media_type: enums::by_table::media_files::media_file_type::MediaFileType`, + m.public_bucket_directory_hash, + m.maybe_public_bucket_prefix, + m.maybe_public_bucket_extension, zds.maybe_creator_user_token as `maybe_creator_user_token: tokens::tokens::users::UserToken`, zds.created_at, zds.updated_at FROM zs_voice_dataset_samples as zds + JOIN media_files as m + ON zds.media_file_token = m.token WHERE zds.dataset_token = ? "#, dataset_token @@ -121,7 +147,13 @@ async fn list_samples_by_dataset_token( struct InternalRawDatasetSampleRecordForList { token: ZsVoiceDatasetSampleToken, - dataset_token: ZsVoiceDatasetToken, + + media_file_token: MediaFileToken, + media_type: MediaFileType, + + public_bucket_directory_hash: String, + maybe_public_bucket_prefix: Option, + maybe_public_bucket_extension: Option, maybe_creator_user_token: Option, diff --git a/crates/lib/mysql_queries/src/queries/voice_designer/voice_samples/mod.rs b/crates/lib/mysql_queries/src/queries/voice_designer/voice_samples/mod.rs index e5bce36894..20417f9a48 100644 --- a/crates/lib/mysql_queries/src/queries/voice_designer/voice_samples/mod.rs +++ b/crates/lib/mysql_queries/src/queries/voice_designer/voice_samples/mod.rs @@ -2,4 +2,4 @@ pub mod delete_sample; pub mod get_dataset_sample; pub mod get_dataset_sample_by_uuid; pub mod insert_dataset_sample_and_media_file; -pub mod list_dataset_samples; \ No newline at end of file +pub mod list_dataset_samples_for_dataset_token; \ No newline at end of file diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/voice_designer/voice_dataset_samples/list_samples_by_dataset.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/voice_designer/voice_dataset_samples/list_samples_by_dataset.rs index 69866c64f5..fed08dceec 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/voice_designer/voice_dataset_samples/list_samples_by_dataset.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/voice_designer/voice_dataset_samples/list_samples_by_dataset.rs @@ -4,17 +4,29 @@ use actix_web::{HttpRequest, HttpResponse, web}; use actix_web::error::ResponseError; use actix_web::http::StatusCode; use chrono::{DateTime, Utc}; +use log::warn; -use log::{info, warn}; -use mysql_queries::queries::voice_designer::voice_samples::list_dataset_samples::list_samples; +use enums::by_table::media_files::media_file_type::MediaFileType; +use mysql_queries::queries::voice_designer::voice_samples::list_dataset_samples_for_dataset_token::list_dataset_samples_for_dataset_token; +use tokens::tokens::media_files::MediaFileToken; +use tokens::tokens::users::UserToken; +use tokens::tokens::zs_voice_dataset_samples::ZsVoiceDatasetSampleToken; use tokens::tokens::zs_voice_datasets::ZsVoiceDatasetToken; + use crate::server_state::ServerState; #[derive(Serialize, Clone)] pub struct ZsSampleRecordForResponse { - sample_token: String, - dataset_token: String, - maybe_creator_user_token: Option, + sample_token: ZsVoiceDatasetSampleToken, + + media_file_token: MediaFileToken, + media_type: MediaFileType, + + public_bucket_directory_hash: String, + maybe_public_bucket_prefix: Option, + maybe_public_bucket_extension: Option, + + maybe_creator_user_token: Option, created_at: DateTime, updated_at: DateTime, @@ -76,7 +88,7 @@ pub async fn list_samples_by_dataset_handler( let dataset_token = ZsVoiceDatasetToken(path.dataset_token.clone()); let is_mod = user_session.can_ban_users; - let query_results = list_samples( + let query_results = list_dataset_samples_for_dataset_token( &dataset_token, is_mod, &server_state.mysql_pool @@ -96,12 +108,13 @@ pub async fn list_samples_by_dataset_handler( let samples = samples .into_iter() .map(|sample| ZsSampleRecordForResponse { - sample_token: sample.token.to_string(), - dataset_token: sample.dataset_token.to_string(), - maybe_creator_user_token: match sample.maybe_creator_user_token { - Some(user_token) => Some(user_token.to_string()), - None => None, - }, + sample_token: sample.sample_token, + media_file_token: sample.media_file_token, + media_type: sample.media_type, + public_bucket_directory_hash: sample.public_bucket_directory_hash, + maybe_public_bucket_prefix: sample.maybe_public_bucket_prefix, + maybe_public_bucket_extension: sample.maybe_public_bucket_extension, + maybe_creator_user_token: sample.maybe_creator_user_token, created_at: sample.created_at, updated_at: sample.updated_at, })