diff --git a/server-rs/crates/api-server/src/character_animation_assets.rs b/server-rs/crates/api-server/src/character_animation_assets.rs index a4c59f384..c2054e9e8 100644 --- a/server-rs/crates/api-server/src/character_animation_assets.rs +++ b/server-rs/crates/api-server/src/character_animation_assets.rs @@ -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), }, )); } diff --git a/server-rs/crates/api-server/src/editor_generation_queue.rs b/server-rs/crates/api-server/src/editor_generation_queue.rs index b60012be7..c9c13a8e8 100644 --- a/server-rs/crates/api-server/src/editor_generation_queue.rs +++ b/server-rs/crates/api-server/src/editor_generation_queue.rs @@ -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("生成失败摘要")); diff --git a/server-rs/crates/api-server/src/editor_project.rs b/server-rs/crates/api-server/src/editor_project.rs index 48bed2fea..8029cf054 100644 --- a/server-rs/crates/api-server/src/editor_project.rs +++ b/server-rs/crates/api-server/src/editor_project.rs @@ -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), }, )); } diff --git a/server-rs/crates/api-server/src/editor_project_icon.rs b/server-rs/crates/api-server/src/editor_project_icon.rs index f974e9d4c..d9650c6f6 100644 --- a/server-rs/crates/api-server/src/editor_project_icon.rs +++ b/server-rs/crates/api-server/src/editor_project_icon.rs @@ -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), }, )); } diff --git a/server-rs/crates/api-server/src/external_editor_api.rs b/server-rs/crates/api-server/src/external_editor_api.rs index 4ae9f03c4..5a4edaeb2 100644 --- a/server-rs/crates/api-server/src/external_editor_api.rs +++ b/server-rs/crates/api-server/src/external_editor_api.rs @@ -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, diff --git a/server-rs/crates/api-server/src/tripo3d/queue.rs b/server-rs/crates/api-server/src/tripo3d/queue.rs index 36269cbee..19fb14213 100644 --- a/server-rs/crates/api-server/src/tripo3d/queue.rs +++ b/server-rs/crates/api-server/src/tripo3d/queue.rs @@ -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, } } } diff --git a/server-rs/crates/api-server/src/vector_engine_audio_generation/generation.rs b/server-rs/crates/api-server/src/vector_engine_audio_generation/generation.rs index ebfa963e6..9bb51a1ef 100644 --- a/server-rs/crates/api-server/src/vector_engine_audio_generation/generation.rs +++ b/server-rs/crates/api-server/src/vector_engine_audio_generation/generation.rs @@ -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), }, )); }