队列状态映射改为借用记录避免提交路径整行克隆
- editor_generation_queue_state 收 &ExternalGenerationJobRecord,只克隆输出需要的三个字段 - Model3dSubmissionResponse::from_job 不再克隆整行 job,status_url 提前算好避免额外克隆 - 其余调用点改为传引用,行为不变
This commit is contained in:
@@ -620,7 +620,7 @@ pub async fn generate_editor_character_animation(
|
||||
return Ok(json_success_body(
|
||||
Some(&request_context),
|
||||
EditorGenerationQueuedResponse {
|
||||
queue_state: editor_generation_queue_state(queue_job),
|
||||
queue_state: editor_generation_queue_state(&queue_job),
|
||||
},
|
||||
));
|
||||
}
|
||||
@@ -1086,7 +1086,7 @@ pub async fn generate_editor_video(
|
||||
return Ok(json_success_body(
|
||||
Some(&request_context),
|
||||
EditorGenerationQueuedResponse {
|
||||
queue_state: editor_generation_queue_state(queue_job),
|
||||
queue_state: editor_generation_queue_state(&queue_job),
|
||||
},
|
||||
));
|
||||
}
|
||||
|
||||
@@ -702,7 +702,7 @@ fn is_inline_media_reference(value: &str) -> bool {
|
||||
}
|
||||
|
||||
pub(crate) fn editor_generation_queue_state(
|
||||
job: ExternalGenerationJobRecord,
|
||||
job: &ExternalGenerationJobRecord,
|
||||
) -> ExternalGenerationJobStatusRecord {
|
||||
let (status, phase_detail, progress) = match job.status.as_str() {
|
||||
"completed" => (ExternalGenerationJobStatus::Completed, "生成已完成。", 100),
|
||||
@@ -714,12 +714,12 @@ pub(crate) fn editor_generation_queue_state(
|
||||
_ => (ExternalGenerationJobStatus::Queued, "排队中。", 8),
|
||||
};
|
||||
ExternalGenerationJobStatusRecord {
|
||||
operation_id: job.job_id,
|
||||
operation_id: job.job_id.clone(),
|
||||
status,
|
||||
phase_label: job.request_label,
|
||||
phase_label: job.request_label.clone(),
|
||||
phase_detail: phase_detail.to_string(),
|
||||
progress,
|
||||
error: job.last_error_message,
|
||||
error: job.last_error_message.clone(),
|
||||
updated_at_micros: job.updated_at_micros,
|
||||
}
|
||||
}
|
||||
@@ -1447,7 +1447,7 @@ mod tests {
|
||||
|
||||
for (persisted_status, phase, expected_status, expected_detail, expected_progress) in cases
|
||||
{
|
||||
let state = editor_generation_queue_state(queue_job_fixture(persisted_status, phase));
|
||||
let state = editor_generation_queue_state(&queue_job_fixture(persisted_status, phase));
|
||||
|
||||
assert_eq!(state.operation_id, "task-queue-test");
|
||||
assert_eq!(state.status, expected_status, "status={persisted_status}");
|
||||
@@ -1467,7 +1467,7 @@ mod tests {
|
||||
let mut job = queue_job_fixture("failed", None);
|
||||
job.last_error_message = Some("生成失败摘要".to_string());
|
||||
|
||||
let state = editor_generation_queue_state(job);
|
||||
let state = editor_generation_queue_state(&job);
|
||||
|
||||
assert_eq!(state.status, ExternalGenerationJobStatus::Failed);
|
||||
assert_eq!(state.error.as_deref(), Some("生成失败摘要"));
|
||||
|
||||
@@ -2795,7 +2795,7 @@ pub async fn generate_editor_scene(
|
||||
return Ok(json_success_body(
|
||||
Some(&request_context),
|
||||
EditorGenerationQueuedResponse {
|
||||
queue_state: editor_generation_queue_state(queue_job),
|
||||
queue_state: editor_generation_queue_state(&queue_job),
|
||||
},
|
||||
));
|
||||
}
|
||||
@@ -2836,7 +2836,7 @@ pub async fn generate_editor_image(
|
||||
return Ok(json_success_body(
|
||||
Some(&request_context),
|
||||
EditorGenerationQueuedResponse {
|
||||
queue_state: editor_generation_queue_state(queue_job),
|
||||
queue_state: editor_generation_queue_state(&queue_job),
|
||||
},
|
||||
));
|
||||
}
|
||||
@@ -5822,7 +5822,7 @@ pub async fn edit_editor_image(
|
||||
return Ok(json_success_body(
|
||||
Some(&request_context),
|
||||
EditorGenerationQueuedResponse {
|
||||
queue_state: editor_generation_queue_state(queue_job),
|
||||
queue_state: editor_generation_queue_state(&queue_job),
|
||||
},
|
||||
));
|
||||
}
|
||||
@@ -6361,7 +6361,7 @@ pub async fn remove_editor_image_background(
|
||||
Ok(json_success_body(
|
||||
Some(&request_context),
|
||||
EditorGenerationQueuedResponse {
|
||||
queue_state: editor_generation_queue_state(queue_job),
|
||||
queue_state: editor_generation_queue_state(&queue_job),
|
||||
},
|
||||
))
|
||||
}
|
||||
@@ -8325,7 +8325,7 @@ pub async fn extract_editor_ui_design_assets(
|
||||
return Ok(json_success_body(
|
||||
Some(&request_context),
|
||||
EditorGenerationQueuedResponse {
|
||||
queue_state: editor_generation_queue_state(queue_job),
|
||||
queue_state: editor_generation_queue_state(&queue_job),
|
||||
},
|
||||
));
|
||||
}
|
||||
|
||||
@@ -619,7 +619,7 @@ pub(crate) async fn generate_icon_spec(
|
||||
return Ok(crate::api_response::json_success_body(
|
||||
Some(&request_context),
|
||||
EditorGenerationQueuedResponse {
|
||||
queue_state: editor_generation_queue_state(job),
|
||||
queue_state: editor_generation_queue_state(&job),
|
||||
},
|
||||
));
|
||||
}
|
||||
@@ -1485,7 +1485,7 @@ pub async fn generate_editor_icon_spritesheet(
|
||||
return Ok(json_success_body(
|
||||
Some(&request_context),
|
||||
EditorGenerationQueuedResponse {
|
||||
queue_state: editor_generation_queue_state(queue_job),
|
||||
queue_state: editor_generation_queue_state(&queue_job),
|
||||
},
|
||||
));
|
||||
}
|
||||
|
||||
@@ -1031,7 +1031,7 @@ fn external_generation_accepted_response(
|
||||
job: ExternalGenerationJobRecord,
|
||||
) -> Response {
|
||||
let kind = job.job_kind.clone();
|
||||
let status = editor_generation_queue_state(job);
|
||||
let status = editor_generation_queue_state(&job);
|
||||
let status_url = format!("/api/external/v1/generations/{}", status.operation_id);
|
||||
let mut response = (
|
||||
StatusCode::ACCEPTED,
|
||||
|
||||
@@ -34,12 +34,14 @@ pub(crate) struct Model3dSubmissionResponse {
|
||||
|
||||
impl Model3dSubmissionResponse {
|
||||
pub(crate) fn from_job(job: ExternalGenerationJobRecord) -> Self {
|
||||
let status = editor_generation_queue_state(job.clone());
|
||||
// 状态映射只读整行记录:这里不必为了它克隆请求 payload 等大字段。
|
||||
let status = editor_generation_queue_state(&job);
|
||||
let status_url = model3d_job_status_url(job.job_id.as_str());
|
||||
Self {
|
||||
operation_id: job.job_id.clone(),
|
||||
operation_id: job.job_id,
|
||||
job_kind: job.job_kind,
|
||||
status,
|
||||
status_url: model3d_job_status_url(job.job_id.as_str()),
|
||||
status_url,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -244,7 +244,7 @@ pub async fn generate_editor_sound_effect(
|
||||
return Ok(json_success_body(
|
||||
Some(&request_context),
|
||||
EditorGenerationQueuedResponse {
|
||||
queue_state: editor_generation_queue_state(queue_job),
|
||||
queue_state: editor_generation_queue_state(&queue_job),
|
||||
},
|
||||
));
|
||||
}
|
||||
@@ -848,7 +848,7 @@ pub async fn generate_editor_background_music(
|
||||
return Ok(json_success_body(
|
||||
Some(&request_context),
|
||||
EditorGenerationQueuedResponse {
|
||||
queue_state: editor_generation_queue_state(queue_job),
|
||||
queue_state: editor_generation_queue_state(&queue_job),
|
||||
},
|
||||
));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user