From 07e1ddfd777126dfdcbe70dbfb2622b57cbe1494 Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Thu, 9 Jul 2026 17:48:47 -0400 Subject: [PATCH] stop writing Dimensional for Mesh/Splat types --- ...4ddae9a60a2177369c58046abdee9ad1e91ee.json | 12 ------ ...9578cbca124327bbf84116764f80d8ab4641d.json | 12 ++++++ .../upsert_media_file_from_file_upload.rs | 8 ++++ .../by_table/media_files/media_file_type.rs | 38 ++++++++++--------- .../fbx_to_gltf/process_job.rs | 2 +- .../src/process_job/process_successful_job.rs | 2 +- .../engine/create_scene_handler.rs | 5 ++- .../upload_engine_asset_media_file_handler.rs | 9 +++-- .../upload_pmx_media_file_handler.rs | 2 +- ...pload_scene_snapshot_media_file_handler.rs | 5 ++- .../upload/upload_spz_media_file_handler.rs | 2 +- .../write_engine_asset_media_file_handler.rs | 8 +++- .../process_model_glb_payload.rs | 4 +- .../process_model_mesh_payload.rs | 2 +- 14 files changed, 65 insertions(+), 46 deletions(-) delete mode 100644 .sqlx/query-3af0a10ab0ed65daba9363605db4ddae9a60a2177369c58046abdee9ad1e91ee.json create mode 100644 .sqlx/query-ed190d823c1d0cb5991666a25329578cbca124327bbf84116764f80d8ab4641d.json diff --git a/.sqlx/query-3af0a10ab0ed65daba9363605db4ddae9a60a2177369c58046abdee9ad1e91ee.json b/.sqlx/query-3af0a10ab0ed65daba9363605db4ddae9a60a2177369c58046abdee9ad1e91ee.json deleted file mode 100644 index 01461052db..0000000000 --- a/.sqlx/query-3af0a10ab0ed65daba9363605db4ddae9a60a2177369c58046abdee9ad1e91ee.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "db_name": "MySQL", - "query": "\nINSERT INTO media_files\nSET\n token = ?,\n\n media_class = ?,\n media_type = ?,\n\n origin_category = ?,\n origin_product_category = ?,\n\n maybe_engine_category = ?,\n maybe_animation_type = ?,\n\n maybe_mime_type = ?,\n file_size_bytes = ?,\n\n checksum_sha2 = ?,\n\n public_bucket_directory_hash = ?,\n maybe_public_bucket_prefix = ?,\n maybe_public_bucket_extension = ?,\n\n maybe_creator_user_token = ?,\n maybe_creator_anonymous_visitor_token = ?,\n creator_ip_address = ?,\n\n creator_set_visibility = ?,\n\n maybe_creator_file_synthetic_id = ?,\n maybe_creator_category_synthetic_id = ?,\n\n is_user_upload = TRUE,\n\n maybe_origin_model_type = NULL,\n maybe_origin_model_token = NULL\n\nON DUPLICATE KEY UPDATE\n\n media_class = ?,\n media_type = ?,\n\n origin_category = ?,\n origin_product_category = ?,\n\n maybe_engine_category = ?,\n maybe_animation_type = ?,\n\n maybe_mime_type = ?,\n file_size_bytes = ?,\n\n checksum_sha2 = ?,\n\n public_bucket_directory_hash = ?,\n maybe_public_bucket_prefix = ?,\n maybe_public_bucket_extension = ?,\n\n maybe_creator_user_token = ?,\n maybe_creator_anonymous_visitor_token = ?,\n creator_ip_address = ?,\n\n creator_set_visibility = ?,\n\n maybe_creator_file_synthetic_id = ?,\n maybe_creator_category_synthetic_id = ?,\n\n is_user_upload = TRUE,\n\n maybe_origin_model_type = NULL,\n maybe_origin_model_token = NULL\n ", - "describe": { - "columns": [], - "parameters": { - "Right": 37 - }, - "nullable": [] - }, - "hash": "3af0a10ab0ed65daba9363605db4ddae9a60a2177369c58046abdee9ad1e91ee" -} diff --git a/.sqlx/query-ed190d823c1d0cb5991666a25329578cbca124327bbf84116764f80d8ab4641d.json b/.sqlx/query-ed190d823c1d0cb5991666a25329578cbca124327bbf84116764f80d8ab4641d.json new file mode 100644 index 0000000000..0602df22de --- /dev/null +++ b/.sqlx/query-ed190d823c1d0cb5991666a25329578cbca124327bbf84116764f80d8ab4641d.json @@ -0,0 +1,12 @@ +{ + "db_name": "MySQL", + "query": "\nINSERT INTO media_files\nSET\n token = ?,\n\n media_class = ?,\n media_type = ?,\n maybe_project_type = ?,\n\n origin_category = ?,\n origin_product_category = ?,\n\n maybe_engine_category = ?,\n maybe_animation_type = ?,\n\n maybe_mime_type = ?,\n file_size_bytes = ?,\n\n checksum_sha2 = ?,\n\n public_bucket_directory_hash = ?,\n maybe_public_bucket_prefix = ?,\n maybe_public_bucket_extension = ?,\n\n maybe_creator_user_token = ?,\n maybe_creator_anonymous_visitor_token = ?,\n creator_ip_address = ?,\n\n creator_set_visibility = ?,\n\n maybe_creator_file_synthetic_id = ?,\n maybe_creator_category_synthetic_id = ?,\n\n is_user_upload = TRUE,\n\n maybe_origin_model_type = NULL,\n maybe_origin_model_token = NULL\n\nON DUPLICATE KEY UPDATE\n\n media_class = ?,\n media_type = ?,\n maybe_project_type = ?,\n\n origin_category = ?,\n origin_product_category = ?,\n\n maybe_engine_category = ?,\n maybe_animation_type = ?,\n\n maybe_mime_type = ?,\n file_size_bytes = ?,\n\n checksum_sha2 = ?,\n\n public_bucket_directory_hash = ?,\n maybe_public_bucket_prefix = ?,\n maybe_public_bucket_extension = ?,\n\n maybe_creator_user_token = ?,\n maybe_creator_anonymous_visitor_token = ?,\n creator_ip_address = ?,\n\n creator_set_visibility = ?,\n\n maybe_creator_file_synthetic_id = ?,\n maybe_creator_category_synthetic_id = ?,\n\n is_user_upload = TRUE,\n\n maybe_origin_model_type = NULL,\n maybe_origin_model_token = NULL\n ", + "describe": { + "columns": [], + "parameters": { + "Right": 39 + }, + "nullable": [] + }, + "hash": "ed190d823c1d0cb5991666a25329578cbca124327bbf84116764f80d8ab4641d" +} diff --git a/crates/schema/database/mysql_queries/src/queries/media_files/upsert/upsert_media_file_from_file_upload.rs b/crates/schema/database/mysql_queries/src/queries/media_files/upsert/upsert_media_file_from_file_upload.rs index 0913f64eee..8e814c8770 100644 --- a/crates/schema/database/mysql_queries/src/queries/media_files/upsert/upsert_media_file_from_file_upload.rs +++ b/crates/schema/database/mysql_queries/src/queries/media_files/upsert/upsert_media_file_from_file_upload.rs @@ -8,6 +8,7 @@ use enums::by_table::media_files::media_file_class::MediaFileClass; use enums::by_table::media_files::media_file_engine_category::MediaFileEngineCategory; use enums::by_table::media_files::media_file_origin_category::MediaFileOriginCategory; use enums::by_table::media_files::media_file_origin_product_category::MediaFileOriginProductCategory; +use enums::by_table::media_files::media_file_project_type::MediaFileProjectType; use enums::by_table::media_files::media_file_type::MediaFileType; use enums::common::visibility::Visibility; use errors::AnyhowResult; @@ -32,6 +33,9 @@ pub struct UpsertMediaFileFromUploadArgs<'a> { pub maybe_media_class: Option, pub media_file_type: MediaFileType, + /// Only set for internal Artcraft project documents (`media_class = 'project'`). + pub maybe_project_type: Option, + pub maybe_engine_category: Option, pub maybe_animation_type: Option, @@ -105,6 +109,7 @@ SET media_class = ?, media_type = ?, + maybe_project_type = ?, origin_category = ?, origin_product_category = ?, @@ -139,6 +144,7 @@ ON DUPLICATE KEY UPDATE media_class = ?, media_type = ?, + maybe_project_type = ?, origin_category = ?, origin_product_category = ?, @@ -173,6 +179,7 @@ ON DUPLICATE KEY UPDATE media_class.to_str(), args.media_file_type.to_str(), + args.maybe_project_type.map(|project_type| project_type.to_str()), origin_category.to_str(), ORIGIN_PRODUCT_CATEGORY.to_str(), @@ -202,6 +209,7 @@ ON DUPLICATE KEY UPDATE media_class.to_str(), args.media_file_type.to_str(), + args.maybe_project_type.map(|project_type| project_type.to_str()), origin_category.to_str(), ORIGIN_PRODUCT_CATEGORY.to_str(), diff --git a/crates/schema/public/enums/src/by_table/media_files/media_file_type.rs b/crates/schema/public/enums/src/by_table/media_files/media_file_type.rs index 55d8947dd0..7764a5d47f 100644 --- a/crates/schema/public/enums/src/by_table/media_files/media_file_type.rs +++ b/crates/schema/public/enums/src/by_table/media_files/media_file_type.rs @@ -171,22 +171,24 @@ impl MediaFileType { | Self::Webm | Self::Mov => MediaFileClass::Video, - Self::Bvh - | Self::Fbx + Self::Fbx | Self::Obj | Self::Glb | Self::Gltf - | Self::Spz - | Self::SceneRon - | Self::SceneJson | Self::Pmd + | Self::Pmx => MediaFileClass::Mesh, + + Self::Spz => MediaFileClass::Splat, + + // Animation and auxiliary data formats with no dedicated class yet. + #[allow(deprecated)] + Self::Bvh | Self::Vmd - | Self::Pmx | Self::Csv => MediaFileClass::Dimensional, - // NB: SceneRon/SceneJson stay Dimensional above until existing rows are - // backfilled to the `project` class. - Self::Json => MediaFileClass::Project, + Self::SceneRon + | Self::SceneJson + | Self::Json => MediaFileClass::Project, } } @@ -524,16 +526,16 @@ mod tests { assert_eq!(MediaFileType::Image.to_media_class(), MediaFileClass::Image); assert_eq!(MediaFileType::Video.to_media_class(), MediaFileClass::Video); assert_eq!(MediaFileType::Bvh.to_media_class(), MediaFileClass::Dimensional); - assert_eq!(MediaFileType::Fbx.to_media_class(), MediaFileClass::Dimensional); - assert_eq!(MediaFileType::Obj.to_media_class(), MediaFileClass::Dimensional); - assert_eq!(MediaFileType::Glb.to_media_class(), MediaFileClass::Dimensional); - assert_eq!(MediaFileType::Gltf.to_media_class(), MediaFileClass::Dimensional); - assert_eq!(MediaFileType::Spz.to_media_class(), MediaFileClass::Dimensional); - assert_eq!(MediaFileType::SceneRon.to_media_class(), MediaFileClass::Dimensional); - assert_eq!(MediaFileType::SceneJson.to_media_class(), MediaFileClass::Dimensional); - assert_eq!(MediaFileType::Pmd.to_media_class(), MediaFileClass::Dimensional); + assert_eq!(MediaFileType::Fbx.to_media_class(), MediaFileClass::Mesh); + assert_eq!(MediaFileType::Obj.to_media_class(), MediaFileClass::Mesh); + assert_eq!(MediaFileType::Glb.to_media_class(), MediaFileClass::Mesh); + assert_eq!(MediaFileType::Gltf.to_media_class(), MediaFileClass::Mesh); + assert_eq!(MediaFileType::Spz.to_media_class(), MediaFileClass::Splat); + assert_eq!(MediaFileType::SceneRon.to_media_class(), MediaFileClass::Project); + assert_eq!(MediaFileType::SceneJson.to_media_class(), MediaFileClass::Project); + assert_eq!(MediaFileType::Pmd.to_media_class(), MediaFileClass::Mesh); assert_eq!(MediaFileType::Vmd.to_media_class(), MediaFileClass::Dimensional); - assert_eq!(MediaFileType::Pmx.to_media_class(), MediaFileClass::Dimensional); + assert_eq!(MediaFileType::Pmx.to_media_class(), MediaFileClass::Mesh); assert_eq!(MediaFileType::Csv.to_media_class(), MediaFileClass::Dimensional); assert_eq!(MediaFileType::Jpg.to_media_class(), MediaFileClass::Image); assert_eq!(MediaFileType::Png.to_media_class(), MediaFileClass::Image); diff --git a/crates/service/job/deprecated/inference_job/src/job/job_types/format_conversion/fbx_to_gltf/process_job.rs b/crates/service/job/deprecated/inference_job/src/job/job_types/format_conversion/fbx_to_gltf/process_job.rs index ec8919bb30..40baa9d1e5 100644 --- a/crates/service/job/deprecated/inference_job/src/job/job_types/format_conversion/fbx_to_gltf/process_job.rs +++ b/crates/service/job/deprecated/inference_job/src/job/job_types/format_conversion/fbx_to_gltf/process_job.rs @@ -187,7 +187,7 @@ pub async fn process_job(args: FbxToGltfJobArgs<'_>) -> Result Some(MediaFileProjectType::Scene3d), + _ => None, + }, media_file_type, maybe_creator_user_token: maybe_user_token, maybe_creator_anonymous_visitor_token: maybe_avt_token.as_ref(), diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_pmx/upload_pmx_media_file_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_pmx/upload_pmx_media_file_handler.rs index 4c25030e36..6057ba33ed 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_pmx/upload_pmx_media_file_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_pmx/upload_pmx_media_file_handler.rs @@ -256,7 +256,7 @@ pub async fn upload_pmx_media_file_handler( // TODO(bt, 2024-02-22): This should be a transaction. let (token, record_id) = insert_media_file_from_file_upload(InsertMediaFileFromUploadArgs { - maybe_media_class: Some(MediaFileClass::Dimensional), + maybe_media_class: Some(MediaFileClass::Mesh), maybe_project_type: None, media_file_type: MediaFileType::Pmx, maybe_creator_user_token: Some(user_session.get_user_token()), diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_scene_snapshot_media_file_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_scene_snapshot_media_file_handler.rs index e1e7b1dd38..888433113f 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_scene_snapshot_media_file_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_scene_snapshot_media_file_handler.rs @@ -13,6 +13,7 @@ use utoipa::ToSchema; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; use enums::by_table::media_files::media_file_class::MediaFileClass; use enums::by_table::media_files::media_file_engine_category::MediaFileEngineCategory; +use enums::by_table::media_files::media_file_project_type::MediaFileProjectType; use enums::by_table::media_files::media_file_type::MediaFileType; use enums::common::visibility::Visibility; use hashing::sha256::sha256_hash_bytes::sha256_hash_bytes; @@ -217,8 +218,8 @@ pub async fn upload_scene_snapshot_media_file_handler( })?; let (token, record_id) = insert_media_file_from_file_upload(InsertMediaFileFromUploadArgs { - maybe_media_class: Some(MediaFileClass::Dimensional), - maybe_project_type: None, + maybe_media_class: Some(MediaFileClass::Project), + maybe_project_type: Some(MediaFileProjectType::Scene3d), media_file_type: MediaFileType::SceneJson, maybe_creator_user_token: maybe_user_token, maybe_creator_anonymous_visitor_token: maybe_avt_token.as_ref(), diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_spz_media_file_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_spz_media_file_handler.rs index ad90347d99..335708208b 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_spz_media_file_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_spz_media_file_handler.rs @@ -253,7 +253,7 @@ pub async fn upload_spz_media_file_handler( .and_then(|text| try_parse_generation_provider(text.as_ref())); let media_token = MediaFileInsertBuilder::new() - .media_file_class(MediaFileClass::Dimensional) + .media_file_class(MediaFileClass::Splat) .media_file_type(MediaFileType::Spz) .maybe_creator_user(maybe_user_token) .maybe_creator_anonymous_visitor(maybe_avt_token.as_ref()) diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upsert_upload/write_engine_asset/write_engine_asset_media_file_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upsert_upload/write_engine_asset/write_engine_asset_media_file_handler.rs index 45641071a0..9a0dfd423e 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upsert_upload/write_engine_asset/write_engine_asset_media_file_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upsert_upload/write_engine_asset/write_engine_asset_media_file_handler.rs @@ -7,7 +7,7 @@ use log::{error, info, warn}; use utoipa::ToSchema; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; -use enums::by_table::media_files::media_file_class::MediaFileClass; +use enums::by_table::media_files::media_file_project_type::MediaFileProjectType; use enums::by_table::media_files::media_file_type::MediaFileType; use enums::common::visibility::Visibility; use hashing::sha256::sha256_hash_bytes::sha256_hash_bytes; @@ -227,7 +227,11 @@ pub async fn write_engine_asset_media_file_handler( // TODO(bt, 2024-02-22): This should be a transaction. let (token, record_id) = upsert_media_file_from_file_upload(UpsertMediaFileFromUploadArgs { maybe_media_file_token: upload_media_request.media_file_token.as_ref(), - maybe_media_class: Some(MediaFileClass::Dimensional), + maybe_media_class: Some(media_file_type.to_media_class()), + maybe_project_type: match media_file_type { + MediaFileType::SceneRon | MediaFileType::SceneJson => Some(MediaFileProjectType::Scene3d), + _ => None, + }, media_file_type, maybe_engine_category: upload_media_request.maybe_engine_category, maybe_animation_type: upload_media_request.maybe_animation_type, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/webhooks/fal/process_success/process_model_glb_payload.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/webhooks/fal/process_success/process_model_glb_payload.rs index 970fb9dbaf..ee7c2cac68 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/webhooks/fal/process_success/process_model_glb_payload.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/webhooks/fal/process_success/process_model_glb_payload.rs @@ -143,7 +143,7 @@ pub async fn process_model_glb_payload( .maybe_creator_anonymous_visitor(job.maybe_creator_anonymous_visitor_token.as_ref()) .creator_ip_address(&job.creator_ip_address) .public_bucket_directory_hash(&public_upload_path) - .media_file_class(MediaFileClass::Dimensional) + .media_file_class(MediaFileClass::Mesh) .media_file_type(media_file_type) .media_file_origin_category(MediaFileOriginCategory::Inference) .maybe_engine_category(Some(MediaFileEngineCategory::Object)) @@ -280,7 +280,7 @@ async fn try_to_attach_thumbnail( .maybe_generation_provider(Some(GenerationProvider::Artcraft)) .maybe_prompt_token(job.maybe_prompt_token.as_ref()) .maybe_platform_type(job.maybe_platform_type) - .media_file_class(MediaFileClass::Dimensional) + .media_file_class(MediaFileClass::Image) .media_file_origin_category(MediaFileOriginCategory::Inference) .media_file_type(media_file_type) .mime_type(mime_type) diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/webhooks/fal/process_success/process_model_mesh_payload.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/webhooks/fal/process_success/process_model_mesh_payload.rs index 6793aa43e4..ae12d619ed 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/webhooks/fal/process_success/process_model_mesh_payload.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/webhooks/fal/process_success/process_model_mesh_payload.rs @@ -174,7 +174,7 @@ pub(crate) async fn upload_mesh_file( .maybe_generation_provider(Some(GenerationProvider::Artcraft)) .maybe_prompt_token(job.maybe_prompt_token.as_ref()) .maybe_platform_type(job.maybe_platform_type) - .media_file_class(MediaFileClass::Dimensional) + .media_file_class(MediaFileClass::Mesh) .media_file_origin_category(MediaFileOriginCategory::Inference) .media_file_type(media_file_type) .mime_type(mime_type)