From 091579e9bbf998546e2fbc98ff1df0286eb4a3ae Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Sun, 12 Apr 2026 02:00:21 -0400 Subject: [PATCH] reuse thumbnail data --- .../handle_successful_fal_webhook.rs | 14 +++-------- .../process_model_glb_payload.rs | 25 ++++++------------- 2 files changed, 12 insertions(+), 27 deletions(-) diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/webhooks/process_success/handle_successful_fal_webhook.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/webhooks/process_success/handle_successful_fal_webhook.rs index 4db8462a98..9885797b66 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/webhooks/process_success/handle_successful_fal_webhook.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/webhooks/process_success/handle_successful_fal_webhook.rs @@ -42,10 +42,6 @@ pub async fn handle_successful_fal_webhook( let mut maybe_media_token = None; let mut maybe_batch_token = None; - // The raw payload is still available for processors that need arbitrary JSON - // access beyond the typed extracted_contents. - let payload = &success_data.payload; - if let Some(ref extracted) = success_data.extracted_contents { if let Some(ref image_data) = extracted.image { info!("Handling image payload for request_id {} / job {:?}", request_id, job.job_token); @@ -75,12 +71,10 @@ pub async fn handle_successful_fal_webhook( } if let Some(ref model_glb_data) = extracted.model_glb { - if let Some(payload_obj) = payload.as_object() { - info!("Handling model_glb payload for request_id {} / job {:?}", request_id, job.job_token); - let token = process_model_glb_payload(model_glb_data, payload_obj, &job, server_state).await?; - if maybe_media_token.is_none() { - maybe_media_token = Some(token); - } + info!("Handling model_glb payload for request_id {} / job {:?}", request_id, job.job_token); + let token = process_model_glb_payload(model_glb_data, extracted.thumbnail.as_ref(), &job, server_state).await?; + if maybe_media_token.is_none() { + maybe_media_token = Some(token); } } else if let Some(ref model_mesh_data) = extracted.model_mesh { info!("Handling model_mesh payload for request_id {} / job {:?}", request_id, job.job_token); diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/webhooks/process_success/process_model_glb_payload.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/webhooks/process_success/process_model_glb_payload.rs index 3482c625f1..083a2622d4 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/webhooks/process_success/process_model_glb_payload.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/webhooks/process_success/process_model_glb_payload.rs @@ -7,13 +7,12 @@ use enums::by_table::media_files::media_file_engine_category::MediaFileEngineCat use enums::by_table::media_files::media_file_origin_category::MediaFileOriginCategory; use enums::by_table::media_files::media_file_type::MediaFileType; use errors::AnyhowResult; -use fal_client::webhook_api::hydrated::hydrated_webhook_contents::ModelGlbData; +use fal_client::webhook_api::hydrated::hydrated_webhook_contents::{ModelGlbData, ThumbnailData}; use hashing::sha256::sha256_hash_bytes::sha256_hash_bytes; use log::{info, warn}; use mimetypes::mimetype_info::mimetype_info::MimetypeInfo; use mysql_queries::queries::generic_inference::fal::get_inference_job_by_fal_id::FalJobDetails; use mysql_queries::queries::media_files::create::insert_builder::media_file_insert_builder::MediaFileInsertBuilder; -use serde_json::{Map, Value}; use mysql_queries::queries::media_files::edit::set_media_file_cover_image::{set_media_file_cover_image, UpdateArgs}; use tokens::tokens::media_files::MediaFileToken; @@ -58,7 +57,7 @@ const PREFIX : Option<&str> = Some("artcraft_"); pub async fn process_model_glb_payload( model_glb_data: &ModelGlbData, - payload: &Map, + maybe_thumbnail_data: Option<&ThumbnailData>, job: &FalJobDetails, server_state: &ServerState, ) -> AnyhowResult { @@ -117,7 +116,7 @@ pub async fn process_model_glb_payload( info!("Glb media file uploaded with token: {}", media_token); let result = try_to_attach_thumbnail( - payload, + maybe_thumbnail_data, job, server_state, &media_token, @@ -132,25 +131,17 @@ pub async fn process_model_glb_payload( } async fn try_to_attach_thumbnail( - payload: &Map, + maybe_thumbnail_data: Option<&ThumbnailData>, job: &FalJobDetails, server_state: &ServerState, glb_media_token: &MediaFileToken, ) -> AnyhowResult<()> { + let thumbnail_data = maybe_thumbnail_data + .ok_or_else(|| anyhow!("no thumbnail data in extracted contents"))?; - let thumbnail_value = payload.get("thumbnail") - .ok_or_else(|| anyhow!("no `thumbnail` key in payload"))?; + info!("Fal Thumbnail Data: {:?}", thumbnail_data); - info!("Fal Thumbnail Payload: {:?}", thumbnail_value); - - #[derive(Deserialize)] - struct ThumbnailPayload { - url: Option, - } - - let thumbnail: ThumbnailPayload = serde_json::from_value(thumbnail_value.clone())?; - - let thumbnail_url = thumbnail.url + let thumbnail_url = thumbnail_data.url .as_deref() .ok_or_else(|| anyhow!("no `url` in thumbnail payload"))?;