Compare commits

...
Author SHA1 Message Date
Brandon Thomas 07e1ddfd77 stop writing Dimensional for Mesh/Splat types 2026-07-09 17:48:47 -04:00
14 changed files with 65 additions and 46 deletions
@@ -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"
}
@@ -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"
}
@@ -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<MediaFileClass>,
pub media_file_type: MediaFileType,
/// Only set for internal Artcraft project documents (`media_class = 'project'`).
pub maybe_project_type: Option<MediaFileProjectType>,
pub maybe_engine_category: Option<MediaFileEngineCategory>,
pub maybe_animation_type: Option<MediaFileAnimationType>,
@@ -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(),
@@ -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);
@@ -187,7 +187,7 @@ pub async fn process_job(args: FbxToGltfJobArgs<'_>) -> Result<JobSuccessResult,
let (inference_result_token, id) = insert_media_file_generic_from_job(InsertFromJobArgs {
pool: &args.job_dependencies.db.mysql_pool,
job: &job,
media_class: MediaFileClass::Dimensional,
media_class: MediaFileClass::Mesh,
media_type: upload_details.media_type,
origin_category: MediaFileOriginCategory::Processed,
origin_product_category: MediaFileOriginProductCategory::Mocap,
@@ -122,7 +122,7 @@ pub async fn process_successful_job(
.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::Splat)
.media_file_origin_category(MediaFileOriginCategory::Inference)
.media_file_origin_product_category(MediaFileOriginProductCategory::WorldGeneration)
.media_file_type(MediaFileType::Spz)
@@ -9,6 +9,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;
@@ -165,8 +166,8 @@ pub async fn create_scene_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_project_type: None,
maybe_media_class: Some(MediaFileClass::Project),
maybe_project_type: Some(MediaFileProjectType::Scene3d),
media_file_type: MediaFileType::SceneRon,
maybe_creator_user_token: maybe_user_token,
maybe_creator_anonymous_visitor_token: maybe_avt_token.as_ref(),
@@ -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;
@@ -204,8 +204,11 @@ pub async fn upload_engine_asset_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_project_type: None,
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_creator_user_token: maybe_user_token,
maybe_creator_anonymous_visitor_token: maybe_avt_token.as_ref(),
@@ -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()),
@@ -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(),
@@ -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())
@@ -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,
@@ -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)
@@ -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)