队列状态映射改为借用记录避免提交路径整行克隆

- editor_generation_queue_state 收 &ExternalGenerationJobRecord,只克隆输出需要的三个字段
- Model3dSubmissionResponse::from_job 不再克隆整行 job,status_url 提前算好避免额外克隆
- 其余调用点改为传引用,行为不变
This commit is contained in:
2026-09-22 16:44:47 +08:00
parent 433ffb4a15
commit bba96e18a1
7 changed files with 23 additions and 21 deletions
@@ -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),
},
));
}