fix: 收紧拼图草稿恢复判定

This commit is contained in:
2026-06-04 03:34:06 +08:00
parent cd959b4095
commit 46a36222cb
8 changed files with 413 additions and 75 deletions

View File

@@ -571,6 +571,10 @@ import {
resolvePlatformPublicWorkStartIntent,
resolveVisiblePuzzleDetailCoverCount,
} from './platformPublicWorkDetailFlow';
import {
hasRecoverableGeneratedPuzzleDraft,
normalizeRecoveredPuzzleDraftSession,
} from './platformPuzzleDraftRecoveryModel';
import {
buildPuzzleResultProfileId,
buildPuzzleResultWorkId,
@@ -1045,77 +1049,6 @@ function openPuzzleRuntimeStage(
writePuzzleRuntimeUrlState(state);
}
function normalizeRecoveredPuzzleDraftSession(
session: PuzzleAgentSessionSnapshot,
): PuzzleAgentSessionSnapshot {
const draft = session.draft;
if (!draft) {
return session;
}
const primaryLevel = draft.levels?.[0];
const selectedCandidate =
primaryLevel?.candidates.find((candidate) => candidate.selected) ??
primaryLevel?.candidates[0] ??
draft.candidates.find((candidate) => candidate.selected) ??
draft.candidates[0] ??
null;
const coverImageSrc =
draft.coverImageSrc?.trim() ||
primaryLevel?.coverImageSrc?.trim() ||
selectedCandidate?.imageSrc.trim() ||
null;
const coverAssetId =
draft.coverAssetId?.trim() ||
primaryLevel?.coverAssetId?.trim() ||
selectedCandidate?.assetId.trim() ||
null;
const selectedCandidateId =
draft.selectedCandidateId ??
primaryLevel?.selectedCandidateId ??
selectedCandidate?.candidateId ??
null;
return {
...session,
draft: {
...draft,
coverImageSrc,
coverAssetId,
selectedCandidateId,
generationStatus: 'ready',
levels: draft.levels?.map((level, index) =>
index === 0
? {
...level,
coverImageSrc: level.coverImageSrc ?? coverImageSrc,
coverAssetId: level.coverAssetId ?? coverAssetId,
selectedCandidateId:
level.selectedCandidateId ?? selectedCandidateId,
generationStatus: 'ready',
}
: level,
),
},
};
}
function hasRecoverableGeneratedPuzzleDraft(
session: PuzzleAgentSessionSnapshot,
) {
const draft = session.draft;
if (!draft) {
return false;
}
const firstLevel = draft.levels?.[0];
return Boolean(
draft.coverImageSrc?.trim() ||
firstLevel?.coverImageSrc?.trim() ||
firstLevel?.candidates.some((candidate) => candidate.imageSrc.trim()),
);
}
function resolveProfileWalletBalance(
dashboard: { walletBalance?: number | null } | null | undefined,
) {