From 895fcd4323b5cd356540cbd7a31240506fc8eedb Mon Sep 17 00:00:00 2001 From: Daniel S Date: Sun, 9 Aug 2026 22:52:55 +0200 Subject: [PATCH] fix(editor): preserve full site config object in save-draft and sync to draft file in config API --- src/pages/api/config.ts | 14 +++++++++++++- src/pages/api/editor/save-draft.ts | 23 +++++++++++++++++------ 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/src/pages/api/config.ts b/src/pages/api/config.ts index ff07545..cbd2d44 100644 --- a/src/pages/api/config.ts +++ b/src/pages/api/config.ts @@ -22,10 +22,22 @@ export const POST: APIRoute = async ({ request }) => { hero: { ...(currentSite.hero || {}), ...(body.siteConfig.hero || {}) }, site_info: { ...((currentSite as any).site_info || {}), ...(body.siteConfig.site_info || {}) } }; - fs.writeFileSync(path.join(dataDir, 'site.config.json'), JSON.stringify(newSite, null, 2), 'utf8'); + const sitePath = path.join(dataDir, 'site.config.json'); + const draftPath = path.join(dataDir, 'site.config.draft.json'); + fs.writeFileSync(sitePath, JSON.stringify(newSite, null, 2), 'utf8'); + + // Falls bereits ein Draft existiert, site_info & is_demo_mode dort ebenfalls aktualisieren + if (fs.existsSync(draftPath)) { + try { + const draftContent = JSON.parse(fs.readFileSync(draftPath, 'utf8')); + const updatedDraft = { ...draftContent, ...newSite }; + fs.writeFileSync(draftPath, JSON.stringify(updatedDraft, null, 2), 'utf8'); + } catch {} + } } + if (body.themeConfig) { const newTheme = { ...currentTheme, ...body.themeConfig }; fs.writeFileSync(path.join(dataDir, 'theme.config.json'), JSON.stringify(newTheme, null, 2), 'utf8'); diff --git a/src/pages/api/editor/save-draft.ts b/src/pages/api/editor/save-draft.ts index 95d6e01..a1d3097 100644 --- a/src/pages/api/editor/save-draft.ts +++ b/src/pages/api/editor/save-draft.ts @@ -8,18 +8,29 @@ const DATA_DIR = process.env.DATA_DIR || path.join(process.cwd(), 'app', 'data') export const POST: APIRoute = async ({ request }) => { try { - const draftConfig = await request.json(); - if (!draftConfig || typeof draftConfig !== 'object') { - return new Response(JSON.stringify({ error: 'Ungültige Konfigurationsdaten' }), { status: 400 }); + const draftBody = await request.json(); + const draftPath = path.join(DATA_DIR, 'site.config.draft.json'); + const livePath = path.join(DATA_DIR, 'site.config.json'); + + let baseConfig: any = {}; + try { + const raw = await fs.readFile(draftPath, 'utf-8'); + baseConfig = JSON.parse(raw); + } catch { + try { + const rawLive = await fs.readFile(livePath, 'utf-8'); + baseConfig = JSON.parse(rawLive); + } catch {} } - const draftPath = path.join(DATA_DIR, 'site.config.draft.json'); - + const updatedConfig = { ...baseConfig, ...draftBody, updated_at: new Date().toISOString() }; + await fs.mkdir(DATA_DIR, { recursive: true }); - await fs.writeFile(draftPath, JSON.stringify(draftConfig, null, 2), 'utf-8'); + await fs.writeFile(draftPath, JSON.stringify(updatedConfig, null, 2), 'utf-8'); return new Response(JSON.stringify({ success: true, message: 'Entwurf erfolgreich gespeichert' }), { status: 200 }); } catch (error) { return new Response(JSON.stringify({ error: 'Fehler beim Speichern des Entwurfs' }), { status: 500 }); } }; +