From 76977543bd07aab6395103d2073e6b865645f569 Mon Sep 17 00:00:00 2001 From: kang Date: Wed, 20 May 2026 22:54:10 +0800 Subject: [PATCH] auto-save 2026-05-20 22:54 (~3) --- .memory/worklog.json | 7 +++++++ src/app/api/packs/generate/route.ts | 22 ++++++++++++---------- src/app/api/text/generate/route.ts | 7 ++++--- 3 files changed, 23 insertions(+), 13 deletions(-) diff --git a/.memory/worklog.json b/.memory/worklog.json index a1d9658..ee2d4ec 100644 --- a/.memory/worklog.json +++ b/.memory/worklog.json @@ -1846,6 +1846,13 @@ "message": "auto-save 2026-05-20 22:43 (~2)", "hash": "33f87eb", "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 } ] } diff --git a/src/app/api/packs/generate/route.ts b/src/app/api/packs/generate/route.ts index 273e0fd..7076f46 100644 --- a/src/app/api/packs/generate/route.ts +++ b/src/app/api/packs/generate/route.ts @@ -13,12 +13,13 @@ export const dynamic = 'force-dynamic'; const PACK_KINDS: PackKind[] = PACK_ORDER; async function persistPackProgress(session: GenSession, imageId: string, pack: AssetPack) { - session.characterSpec = pack.characterSpec; - session.packs = [ - ...(session.packs ?? []).filter(existing => !(existing.kind === pack.kind && existing.sourceImageId === imageId)), + const latest = await loadSession(session.id) ?? session; + latest.characterSpec = pack.characterSpec; + latest.packs = [ + ...(latest.packs ?? []).filter(existing => !(existing.kind === pack.kind && existing.sourceImageId === imageId)), { ...pack, assets: [...pack.assets] }, ]; - await saveSession(session); + await saveSession(latest); } function isCompletePack(pack: AssetPack, imageId: string): boolean { @@ -140,16 +141,17 @@ export async function POST(req: Request) { }); }, }); - baseSession.characterSpec = pack.characterSpec; - baseSession.packs = [ - ...(baseSession.packs ?? []).filter(existing => !(existing.kind === kind && existing.sourceImageId === imageId)), + const latestSession = await loadSession(baseSession.id) ?? baseSession; + latestSession.characterSpec = pack.characterSpec; + latestSession.packs = [ + ...(latestSession.packs ?? []).filter(existing => !(existing.kind === kind && existing.sourceImageId === imageId)), pack, ]; - baseSession.exports = [ - ...(baseSession.exports ?? []).filter(existing => !(existing.packKind === kind && existing.source.sourceImageId === imageId)), + latestSession.exports = [ + ...(latestSession.exports ?? []).filter(existing => !(existing.packKind === kind && existing.source.sourceImageId === imageId)), manifest, ]; - await saveSession(baseSession); + await saveSession(latestSession); recordEvent({ action: 'pack.generate_completed', sessionId, diff --git a/src/app/api/text/generate/route.ts b/src/app/api/text/generate/route.ts index 7d53b10..f6b3c17 100644 --- a/src/app/api/text/generate/route.ts +++ b/src/app/api/text/generate/route.ts @@ -27,11 +27,12 @@ export async function POST(req: Request) { }); const generated = await generateTextAssets({ session, templateIds: body.templateIds }); const nextIds = new Set(generated.textAssets.map(asset => asset.templateId)); - session.textAssets = [ - ...(session.textAssets ?? []).filter(asset => !nextIds.has(asset.templateId)), + const latest = await loadSession(session.id) ?? session; + latest.textAssets = [ + ...(latest.textAssets ?? []).filter(asset => !nextIds.has(asset.templateId)), ...generated.textAssets, ]; - await saveSession(session); + await saveSession(latest); recordEvent({ action: 'text.generate_completed', sessionId: session.id,