From d0a1e0192acdb5baf9d76dd8b3db800f1fef2f0d Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Mon, 1 Apr 2024 02:21:02 -0400 Subject: [PATCH] title in multipart media upload APIs --- .../insert_media_file_from_file_upload.rs | 6 ++++++ .../endpoints/engine/create_scene_handler.rs | 1 + .../endpoints/engine/drain_multipart_request.rs | 17 ++++++++++++++++- .../engine/process_upload_media_file.rs | 1 + .../drain_multipart_request.rs | 12 ++++++++++++ .../upload_engine_asset_media_file_handler.rs | 1 + .../upload_generic/drain_multipart_request.rs | 12 ++++++++++++ .../upload_generic/process_upload_media_file.rs | 1 + .../upload_video/drain_multipart_request.rs | 12 ++++++++++++ .../upload_video_media_file_handler.rs | 1 + 10 files changed, 63 insertions(+), 1 deletion(-) diff --git a/crates/lib/mysql_queries/src/queries/media_files/create/insert_media_file_from_file_upload.rs b/crates/lib/mysql_queries/src/queries/media_files/create/insert_media_file_from_file_upload.rs index 81f2ef0527..6aaee2591a 100644 --- a/crates/lib/mysql_queries/src/queries/media_files/create/insert_media_file_from_file_upload.rs +++ b/crates/lib/mysql_queries/src/queries/media_files/create/insert_media_file_from_file_upload.rs @@ -44,6 +44,8 @@ pub struct InsertMediaFileFromUploadArgs<'a> { // TODO: Media duration. //pub duration_millis: u64, + pub maybe_title: Option<&'a str>, + pub public_bucket_directory_hash: &'a str, pub maybe_public_bucket_prefix: Option<&'a str>, pub maybe_public_bucket_extension: Option<&'a str>, @@ -109,6 +111,8 @@ SET checksum_sha2 = ?, + maybe_title = ?, + public_bucket_directory_hash = ?, maybe_public_bucket_prefix = ?, maybe_public_bucket_extension = ?, @@ -136,6 +140,8 @@ SET args.sha256_checksum, + args.maybe_title, + args.public_bucket_directory_hash, args.maybe_public_bucket_prefix, args.maybe_public_bucket_extension, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/engine/create_scene_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/engine/create_scene_handler.rs index e993420128..94b229fa24 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/engine/create_scene_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/engine/create_scene_handler.rs @@ -206,6 +206,7 @@ pub async fn create_scene_handler( file_size_bytes: file_size_bytes as u64, duration_millis: 0, // None sha256_checksum: &hash, + maybe_title: upload_media_request.title.as_deref(), public_bucket_directory_hash: public_upload_path.get_object_hash(), maybe_public_bucket_prefix: PREFIX, maybe_public_bucket_extension: SUFFIX, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/engine/drain_multipart_request.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/engine/drain_multipart_request.rs index 6bca3b91d9..afaf08ac79 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/engine/drain_multipart_request.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/engine/drain_multipart_request.rs @@ -9,9 +9,15 @@ use tokens::tokens::zs_voice_datasets::ZsVoiceDatasetToken; use crate::http_server::web_utils::read_multipart_field_bytes::{checked_read_multipart_bytes, read_multipart_field_as_text}; pub struct MediaFileUploadData { + // Required pub uuid_idempotency_token: Option, - pub file_name: Option, pub file_bytes: Option, + + // Optional: name of the file in the File() object + pub file_name: Option, + + // Optional: title of the scene (media_files' maybe_title) + pub title: Option, } /// Pull common parts out of multipart media HTTP requests, typically for handling file uploads. @@ -19,6 +25,7 @@ pub async fn drain_multipart_request(mut multipart_payload: Multipart) -> Anyhow let mut uuid_idempotency_token = None; let mut file_bytes = None; let mut file_name = None; + let mut title = None; while let Ok(Some(mut field)) = multipart_payload.try_next().await { let mut field_name = None; @@ -47,6 +54,13 @@ pub async fn drain_multipart_request(mut multipart_payload: Multipart) -> Anyhow e })?; }, + Some("title") => { + title = read_multipart_field_as_text(&mut field).await + .map_err(|e| { + warn!("Error reading title: {:}", &e); + e + })?; + }, _ => continue, } } @@ -55,5 +69,6 @@ pub async fn drain_multipart_request(mut multipart_payload: Multipart) -> Anyhow uuid_idempotency_token, file_name, file_bytes, + title, }) } diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/engine/process_upload_media_file.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/engine/process_upload_media_file.rs index 8b9eb7b163..be3de8bf2a 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/engine/process_upload_media_file.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/engine/process_upload_media_file.rs @@ -336,6 +336,7 @@ pub async fn process_upload_media_file( file_size_bytes: file_size_bytes as u64, duration_millis: 0, // TODO sha256_checksum: &hash, + maybe_title: upload_media_request.title.as_deref(), public_bucket_directory_hash: public_upload_path.get_object_hash(), maybe_public_bucket_prefix: PREFIX, maybe_public_bucket_extension: extension.as_deref(), diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_engine_asset/drain_multipart_request.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_engine_asset/drain_multipart_request.rs index 282a2fcfe1..a6c4311b35 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_engine_asset/drain_multipart_request.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_engine_asset/drain_multipart_request.rs @@ -17,6 +17,9 @@ pub struct MediaFileUploadData { pub file_bytes: Option, pub media_file_subtype: Option, pub media_file_class: Option, + + // Optional: title of the scene (media_files' maybe_title) + pub title: Option, } /// Pull common parts out of multipart media HTTP requests, typically for handling file uploads. @@ -26,6 +29,7 @@ pub async fn drain_multipart_request(mut multipart_payload: Multipart) -> Anyhow let mut file_name = None; let mut media_file_class = None; let mut media_file_subtype = None; + let mut title = None; while let Ok(Some(mut field)) = multipart_payload.try_next().await { let mut field_name = None; @@ -80,6 +84,13 @@ pub async fn drain_multipart_request(mut multipart_payload: Multipart) -> Anyhow anyhow!("Wrong MediaFileClass: {:?}", &err) })?; }, + Some("title") => { + title = read_multipart_field_as_text(&mut field).await + .map_err(|e| { + warn!("Error reading title: {:}", &e); + e + })?; + }, _ => continue, } } @@ -90,5 +101,6 @@ pub async fn drain_multipart_request(mut multipart_payload: Multipart) -> Anyhow file_bytes, media_file_class, media_file_subtype, + title, }) } diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_engine_asset/upload_engine_asset_media_file_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_engine_asset/upload_engine_asset_media_file_handler.rs index 925848e18c..715b79444c 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_engine_asset/upload_engine_asset_media_file_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_engine_asset/upload_engine_asset_media_file_handler.rs @@ -205,6 +205,7 @@ pub async fn upload_engine_asset_media_file_handler( file_size_bytes: file_size_bytes as u64, duration_millis: 0, sha256_checksum: &hash, + maybe_title: upload_media_request.title.as_deref(), public_bucket_directory_hash: public_upload_path.get_object_hash(), maybe_public_bucket_prefix: PREFIX, maybe_public_bucket_extension: Some(suffix), diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_generic/drain_multipart_request.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_generic/drain_multipart_request.rs index 708eb6cc86..f45d47828f 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_generic/drain_multipart_request.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_generic/drain_multipart_request.rs @@ -13,6 +13,9 @@ pub struct MediaFileUploadData { pub file_name: Option, pub file_bytes: Option, pub media_source: MediaFileUploadSource, + + // Optional: title of the scene (media_files' maybe_title) + pub title: Option, } /// Where the frontend tells us the file came from. @@ -31,6 +34,7 @@ pub async fn drain_multipart_request(mut multipart_payload: Multipart) -> Anyhow let mut file_bytes = None; let mut file_name = None; let mut media_source = None; + let mut title = None; while let Ok(Some(mut field)) = multipart_payload.try_next().await { let mut field_name = None; @@ -66,6 +70,13 @@ pub async fn drain_multipart_request(mut multipart_payload: Multipart) -> Anyhow e })?; }, + Some("title") => { + title = read_multipart_field_as_text(&mut field).await + .map_err(|e| { + warn!("Error reading title: {:}", &e); + e + })?; + }, _ => continue, } } @@ -87,5 +98,6 @@ pub async fn drain_multipart_request(mut multipart_payload: Multipart) -> Anyhow file_name, file_bytes, media_source, + title, }) } diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_generic/process_upload_media_file.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_generic/process_upload_media_file.rs index f60880c062..6ec2c7ade0 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_generic/process_upload_media_file.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_generic/process_upload_media_file.rs @@ -336,6 +336,7 @@ pub async fn process_upload_media_file( file_size_bytes: file_size_bytes as u64, duration_millis: 0, // TODO sha256_checksum: &hash, + maybe_title: upload_media_request.title.as_deref(), public_bucket_directory_hash: public_upload_path.get_object_hash(), maybe_public_bucket_prefix: PREFIX, maybe_public_bucket_extension: extension.as_deref(), diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_video/drain_multipart_request.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_video/drain_multipart_request.rs index 708eb6cc86..f45d47828f 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_video/drain_multipart_request.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_video/drain_multipart_request.rs @@ -13,6 +13,9 @@ pub struct MediaFileUploadData { pub file_name: Option, pub file_bytes: Option, pub media_source: MediaFileUploadSource, + + // Optional: title of the scene (media_files' maybe_title) + pub title: Option, } /// Where the frontend tells us the file came from. @@ -31,6 +34,7 @@ pub async fn drain_multipart_request(mut multipart_payload: Multipart) -> Anyhow let mut file_bytes = None; let mut file_name = None; let mut media_source = None; + let mut title = None; while let Ok(Some(mut field)) = multipart_payload.try_next().await { let mut field_name = None; @@ -66,6 +70,13 @@ pub async fn drain_multipart_request(mut multipart_payload: Multipart) -> Anyhow e })?; }, + Some("title") => { + title = read_multipart_field_as_text(&mut field).await + .map_err(|e| { + warn!("Error reading title: {:}", &e); + e + })?; + }, _ => continue, } } @@ -87,5 +98,6 @@ pub async fn drain_multipart_request(mut multipart_payload: Multipart) -> Anyhow file_name, file_bytes, media_source, + title, }) } diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_video/upload_video_media_file_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_video/upload_video_media_file_handler.rs index 48a22c6265..11ad3d44d6 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_video/upload_video_media_file_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_video/upload_video_media_file_handler.rs @@ -219,6 +219,7 @@ pub async fn upload_video_media_file_handler( file_size_bytes: file_size_bytes as u64, duration_millis: mp4_info.duration_millis as u64, sha256_checksum: &hash, + maybe_title: upload_media_request.title.as_deref(), public_bucket_directory_hash: public_upload_path.get_object_hash(), maybe_public_bucket_prefix: PREFIX, maybe_public_bucket_extension: Some(&extension),