feat: unify phase one creation flow

This commit is contained in:
2026-05-30 05:05:02 +08:00
parent 3a87b2d966
commit 26975644b5
33 changed files with 2037 additions and 539 deletions

View File

@@ -100,6 +100,7 @@ fn map_wooden_fish_session_snapshot(
fn map_wooden_fish_work_snapshot(
snapshot: WoodenFishWorkSnapshot,
) -> Result<WoodenFishWorkProfileResponse, SpacetimeClientError> {
let generation_status = parse_generation_status(&snapshot.generation_status);
let draft = WoodenFishDraftResponse {
template_id: "wooden-fish".to_string(),
template_name: "敲木鱼".to_string(),
@@ -116,15 +117,23 @@ fn map_wooden_fish_work_snapshot(
back_button_asset: snapshot.back_button_asset.clone().map(map_image_asset),
hit_sound_asset: snapshot.hit_sound_asset.clone().map(map_audio_asset),
cover_image_src: empty_string_to_none(snapshot.cover_image_src.clone()),
generation_status: parse_generation_status(&snapshot.generation_status),
generation_status: generation_status.clone(),
};
let hit_object_asset = draft
.hit_object_asset
.clone()
.or_else(|| {
matches!(generation_status, WoodenFishGenerationStatus::Failed)
.then(default_failed_hit_object_asset)
})
.ok_or_else(|| SpacetimeClientError::missing_snapshot("wooden fish hit object asset"))?;
let hit_sound_asset = draft
.hit_sound_asset
.clone()
.or_else(|| {
matches!(generation_status, WoodenFishGenerationStatus::Failed)
.then(default_failed_hit_sound_asset)
})
.ok_or_else(|| SpacetimeClientError::missing_snapshot("wooden fish hit sound asset"))?;
Ok(WoodenFishWorkProfileResponse {
summary: WoodenFishWorkSummaryResponse {
@@ -143,7 +152,7 @@ fn map_wooden_fish_work_snapshot(
updated_at: format_timestamp_micros(snapshot.updated_at_micros),
published_at: snapshot.published_at_micros.map(format_timestamp_micros),
publish_ready: snapshot.publish_ready,
generation_status: parse_generation_status(&snapshot.generation_status),
generation_status,
},
draft,
hit_object_asset,
@@ -154,6 +163,31 @@ fn map_wooden_fish_work_snapshot(
})
}
fn default_failed_hit_object_asset() -> WoodenFishImageAsset {
WoodenFishImageAsset {
asset_id: "wooden-fish-failed-hit-object".to_string(),
image_src: "/wooden-fish/default-hit-object.png".to_string(),
image_object_key: "public/wooden-fish/default-hit-object.png".to_string(),
asset_object_id: "wooden-fish-failed-hit-object".to_string(),
generation_provider: "failed-fallback".to_string(),
prompt: "生成失败占位图".to_string(),
width: 1024,
height: 1024,
}
}
fn default_failed_hit_sound_asset() -> WoodenFishAudioAsset {
WoodenFishAudioAsset {
asset_id: "wooden-fish-failed-hit-sound".to_string(),
audio_src: "/wooden-fish/default-hit-sound.mp3".to_string(),
audio_object_key: "public/wooden-fish/default-hit-sound.mp3".to_string(),
asset_object_id: "wooden-fish-failed-hit-sound".to_string(),
source: "failed-fallback".to_string(),
prompt: Some("生成失败占位音效".to_string()),
duration_ms: Some(3_000),
}
}
fn map_wooden_fish_draft_snapshot(snapshot: WoodenFishDraftSnapshot) -> WoodenFishDraftResponse {
WoodenFishDraftResponse {
template_id: snapshot.template_id,