auto-save 2026-05-20 22:54 (~3)

This commit is contained in:
2026-05-20 22:54:10 +08:00
parent a3d0c97d23
commit 76977543bd
3 changed files with 23 additions and 13 deletions

View File

@@ -1846,6 +1846,13 @@
"message": "auto-save 2026-05-20 22:43 (~2)", "message": "auto-save 2026-05-20 22:43 (~2)",
"hash": "33f87eb", "hash": "33f87eb",
"files_changed": 2 "files_changed": 2
},
{
"ts": "2026-05-20T22:48:44+08:00",
"type": "commit",
"message": "auto-save 2026-05-20 22:48 (~2)",
"hash": "a3d0c97",
"files_changed": 2
} }
] ]
} }

View File

@@ -13,12 +13,13 @@ export const dynamic = 'force-dynamic';
const PACK_KINDS: PackKind[] = PACK_ORDER; const PACK_KINDS: PackKind[] = PACK_ORDER;
async function persistPackProgress(session: GenSession, imageId: string, pack: AssetPack) { async function persistPackProgress(session: GenSession, imageId: string, pack: AssetPack) {
session.characterSpec = pack.characterSpec; const latest = await loadSession(session.id) ?? session;
session.packs = [ latest.characterSpec = pack.characterSpec;
...(session.packs ?? []).filter(existing => !(existing.kind === pack.kind && existing.sourceImageId === imageId)), latest.packs = [
...(latest.packs ?? []).filter(existing => !(existing.kind === pack.kind && existing.sourceImageId === imageId)),
{ ...pack, assets: [...pack.assets] }, { ...pack, assets: [...pack.assets] },
]; ];
await saveSession(session); await saveSession(latest);
} }
function isCompletePack(pack: AssetPack, imageId: string): boolean { function isCompletePack(pack: AssetPack, imageId: string): boolean {
@@ -140,16 +141,17 @@ export async function POST(req: Request) {
}); });
}, },
}); });
baseSession.characterSpec = pack.characterSpec; const latestSession = await loadSession(baseSession.id) ?? baseSession;
baseSession.packs = [ latestSession.characterSpec = pack.characterSpec;
...(baseSession.packs ?? []).filter(existing => !(existing.kind === kind && existing.sourceImageId === imageId)), latestSession.packs = [
...(latestSession.packs ?? []).filter(existing => !(existing.kind === kind && existing.sourceImageId === imageId)),
pack, pack,
]; ];
baseSession.exports = [ latestSession.exports = [
...(baseSession.exports ?? []).filter(existing => !(existing.packKind === kind && existing.source.sourceImageId === imageId)), ...(latestSession.exports ?? []).filter(existing => !(existing.packKind === kind && existing.source.sourceImageId === imageId)),
manifest, manifest,
]; ];
await saveSession(baseSession); await saveSession(latestSession);
recordEvent({ recordEvent({
action: 'pack.generate_completed', action: 'pack.generate_completed',
sessionId, sessionId,

View File

@@ -27,11 +27,12 @@ export async function POST(req: Request) {
}); });
const generated = await generateTextAssets({ session, templateIds: body.templateIds }); const generated = await generateTextAssets({ session, templateIds: body.templateIds });
const nextIds = new Set(generated.textAssets.map(asset => asset.templateId)); const nextIds = new Set(generated.textAssets.map(asset => asset.templateId));
session.textAssets = [ const latest = await loadSession(session.id) ?? session;
...(session.textAssets ?? []).filter(asset => !nextIds.has(asset.templateId)), latest.textAssets = [
...(latest.textAssets ?? []).filter(asset => !nextIds.has(asset.templateId)),
...generated.textAssets, ...generated.textAssets,
]; ];
await saveSession(session); await saveSession(latest);
recordEvent({ recordEvent({
action: 'text.generate_completed', action: 'text.generate_completed',
sessionId: session.id, sessionId: session.id,