Persoenliche Angaben: fehlende settings-Zeile ist ein gueltiger Zustand
Neu angelegte Benutzer hatten keine settings-Zeile - die legte bisher nur
die Migration von Hand fuer den Admin an, POST /admin/users dagegen nicht.
Der Code ging aber davon aus, dass die Zeile immer existiert:
- /vorlagen lieferte fuer neue Benutzer 500: die View greift auf
settings.name zu, bekam aber undefined.
- PUT /api/v1/settings verwarf Schreibzugriffe stillschweigend: das blanke
UPDATE traf null Zeilen und meldete trotzdem success.
Statt Platzhalter-Zeilen zu provisionieren ist "keine Zeile" jetzt ueberall
ein gueltiger Zustand - genau wie bei prompts, design und app_state:
- loadSettings() (neben loadPrompts()/loadDesign()) liefert {} statt
undefined; alle sechs Lesestellen gehen darueber.
- PUT /api/v1/settings ist ein Upsert, GET liefert {} statt leerem Body.
- Chat-Tool bewerbung_detail: JOIN auf jobangebote zusaetzlich ueber
j.user_id = b.user_id, wie derselbe JOIN an anderer Stelle.
Repariert auch bereits angelegte Benutzer ohne Backfill-Migration.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+10
-3
@@ -478,8 +478,10 @@ function createExternalApi(deps) {
|
||||
// --- Settings ------------------------------------------------------
|
||||
router.get('/settings', async (req, res) => {
|
||||
try {
|
||||
// A user who never saved their personal details has no settings row; that
|
||||
// is a valid state, so answer with an empty object instead of no body.
|
||||
const settings = await dbGet('SELECT * FROM settings WHERE user_id = ?', [uid()]);
|
||||
res.json(settings);
|
||||
res.json(settings || {});
|
||||
} catch (error) {
|
||||
console.error('API get settings error:', error);
|
||||
res.status(500).json({ error: 'Serverfehler' });
|
||||
@@ -489,9 +491,14 @@ function createExternalApi(deps) {
|
||||
router.put('/settings', async (req, res) => {
|
||||
try {
|
||||
const { name, adresse, kundennummer } = req.body || {};
|
||||
// Upsert, not UPDATE: a user without a settings row would otherwise match
|
||||
// zero rows and the write would be silently dropped.
|
||||
await dbRun(
|
||||
'UPDATE settings SET name = ?, adresse = ?, kundennummer = ? WHERE user_id = ?',
|
||||
[sanitizeInput(name), sanitizeInput(adresse), sanitizeInput(kundennummer), uid()]
|
||||
`INSERT INTO settings (user_id, name, adresse, kundennummer)
|
||||
VALUES (?, ?, ?, ?)
|
||||
ON CONFLICT(user_id) DO UPDATE SET
|
||||
name = excluded.name, adresse = excluded.adresse, kundennummer = excluded.kundennummer`,
|
||||
[uid(), sanitizeInput(name), sanitizeInput(adresse), sanitizeInput(kundennummer)]
|
||||
);
|
||||
res.json({ success: true });
|
||||
} catch (error) {
|
||||
|
||||
Reference in New Issue
Block a user