Merge pull request #110 from storytold/echelon-list-dataset-samples

Enrich list dataset samples query + endpoint with bucket information
This commit is contained in:
Brandon Thomas authored and GitHub committed 2023-10-19 18:24:39 -04:00
commit 593fb50fcb
3 files changed
+66 -21

No files matched your search

@@ -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<String>,
pub maybe_public_bucket_extension: Option<String>,
pub maybe_creator_user_token: Option<UserToken>,
@@ -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<String>,
maybe_public_bucket_extension: Option<String>,
maybe_creator_user_token: Option<UserToken>,
@@ -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;
pub mod list_dataset_samples_for_dataset_token;
@@ -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<String>,
sample_token: ZsVoiceDatasetSampleToken,
media_file_token: MediaFileToken,
media_type: MediaFileType,
public_bucket_directory_hash: String,
maybe_public_bucket_prefix: Option<String>,
maybe_public_bucket_extension: Option<String>,
maybe_creator_user_token: Option<UserToken>,
created_at: DateTime<Utc>,
updated_at: DateTime<Utc>,
@@ -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,
})