恢复可选目录生成器的默认素材目录
角色图片生成在入队与同步执行预检前恢复 project 默认目录 UI 设计素材提取在入队与 worker 执行预检前恢复 project 默认目录 新增默认目录策略及四条调用路径回归测试
This commit is contained in:
@@ -2645,7 +2645,10 @@ pub(crate) async fn enqueue_editor_image_generation_for_owner(
|
||||
state,
|
||||
caller.owner_user_id.as_str(),
|
||||
payload.project_id.clone(),
|
||||
payload.asset_folder_id.clone(),
|
||||
resolve_editor_image_generation_target_folder_id(
|
||||
payload.asset_folder_id.clone(),
|
||||
normalized_kind,
|
||||
),
|
||||
)
|
||||
.await?;
|
||||
payload.project_id = target.project_id;
|
||||
@@ -2865,7 +2868,10 @@ where
|
||||
state,
|
||||
caller.owner_user_id.as_str(),
|
||||
payload.project_id.clone(),
|
||||
payload.asset_folder_id.clone(),
|
||||
resolve_editor_image_generation_target_folder_id(
|
||||
payload.asset_folder_id.clone(),
|
||||
normalized_kind,
|
||||
),
|
||||
)
|
||||
.await?;
|
||||
payload.project_id = target.project_id;
|
||||
@@ -7240,7 +7246,7 @@ pub(crate) async fn enqueue_editor_ui_design_asset_extraction_for_owner(
|
||||
state,
|
||||
caller.owner_user_id.as_str(),
|
||||
payload.project_id.clone(),
|
||||
payload.asset_folder_id.clone(),
|
||||
resolve_editor_ui_design_asset_extraction_target_folder_id(payload.asset_folder_id.clone()),
|
||||
)
|
||||
.await?;
|
||||
payload.project_id = target.project_id;
|
||||
@@ -7309,7 +7315,7 @@ pub(crate) async fn extract_editor_ui_design_assets_for_owner(
|
||||
state,
|
||||
caller.owner_user_id.as_str(),
|
||||
payload.project_id.clone(),
|
||||
payload.asset_folder_id.clone(),
|
||||
resolve_editor_ui_design_asset_extraction_target_folder_id(payload.asset_folder_id.clone()),
|
||||
)
|
||||
.await?;
|
||||
payload.project_id = target.project_id;
|
||||
@@ -10224,6 +10230,22 @@ pub(crate) fn normalize_generated_asset_folder_id(
|
||||
}
|
||||
}
|
||||
|
||||
fn resolve_editor_image_generation_target_folder_id(
|
||||
asset_folder_id: Option<String>,
|
||||
normalized_kind: Option<&str>,
|
||||
) -> Option<String> {
|
||||
asset_folder_id.or_else(|| {
|
||||
matches!(normalized_kind, Some("character"))
|
||||
.then(|| EDITOR_ASSET_DEFAULT_FOLDER_ID.to_string())
|
||||
})
|
||||
}
|
||||
|
||||
fn resolve_editor_ui_design_asset_extraction_target_folder_id(
|
||||
asset_folder_id: Option<String>,
|
||||
) -> Option<String> {
|
||||
asset_folder_id.or_else(|| Some(EDITOR_ASSET_DEFAULT_FOLDER_ID.to_string()))
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Eq)]
|
||||
pub(crate) struct EditorBillableGenerationTarget {
|
||||
pub(crate) project_id: Option<String>,
|
||||
@@ -20037,6 +20059,56 @@ mod tests {
|
||||
assert_eq!(normalize_generated_asset_folder_id(None, "user-1"), None);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn optional_folder_generators_restore_their_project_folder_defaults() {
|
||||
assert_eq!(
|
||||
resolve_editor_image_generation_target_folder_id(None, Some("character")).as_deref(),
|
||||
Some(EDITOR_ASSET_DEFAULT_FOLDER_ID)
|
||||
);
|
||||
assert_eq!(
|
||||
resolve_editor_image_generation_target_folder_id(None, Some("scene")),
|
||||
None
|
||||
);
|
||||
assert_eq!(
|
||||
resolve_editor_image_generation_target_folder_id(
|
||||
Some("owner:asset-folder:custom".to_string()),
|
||||
Some("character"),
|
||||
)
|
||||
.as_deref(),
|
||||
Some("owner:asset-folder:custom")
|
||||
);
|
||||
assert_eq!(
|
||||
resolve_editor_ui_design_asset_extraction_target_folder_id(None).as_deref(),
|
||||
Some(EDITOR_ASSET_DEFAULT_FOLDER_ID)
|
||||
);
|
||||
|
||||
let source = include_str!("editor_project.rs");
|
||||
for (start, end, resolver) in [
|
||||
(
|
||||
"pub(crate) async fn enqueue_editor_image_generation_for_owner",
|
||||
"pub(crate) async fn validate_editor_image_generation_parameters_for_owner",
|
||||
"resolve_editor_image_generation_target_folder_id(",
|
||||
),
|
||||
(
|
||||
"pub(crate) async fn generate_editor_image_for_owner_with_prompt_builder",
|
||||
"fn editor_image_generation_billing_asset_kind",
|
||||
"resolve_editor_image_generation_target_folder_id(",
|
||||
),
|
||||
(
|
||||
"pub(crate) async fn enqueue_editor_ui_design_asset_extraction_for_owner",
|
||||
"pub(crate) async fn extract_editor_ui_design_assets_for_owner",
|
||||
"resolve_editor_ui_design_asset_extraction_target_folder_id(",
|
||||
),
|
||||
(
|
||||
"pub(crate) async fn extract_editor_ui_design_assets_for_owner",
|
||||
"pub(crate) fn editor_project_payload_from_record",
|
||||
"resolve_editor_ui_design_asset_extraction_target_folder_id(",
|
||||
),
|
||||
] {
|
||||
assert_function_contains(source, start, end, &[resolver]);
|
||||
}
|
||||
}
|
||||
|
||||
fn assert_function_contains(source: &str, start: &str, end: &str, snippets: &[&str]) {
|
||||
let start_index = source
|
||||
.find(start)
|
||||
|
||||
Reference in New Issue
Block a user