Einstellungen: Vorauswahl für KI-Generierung (Dokumente + Anlagen)
Zwei neue, pro Benutzer gespeicherte Konfigurationswerte: GEN_DOKUMENTE_DEFAULT (Standard: Anschreiben + Lebenslauf) und GEN_ANLAGEN_DEFAULT (Standard: keine). Sie belegen die Häkchen auf der Bewerbungsseite vor; eine bereits getroffene Dokumentenauswahl der Bewerbung gewinnt weiterhin. Die REST-API nutzt die Vorauswahl, wenn dokumente/anlagen im Body fehlen. Die Einstellungsseite kennt dafür jetzt Checkbox-Gruppen, deren Optionen auch erst zur Renderzeit feststehen dürfen (die eigenen Anlagen). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -31,7 +31,7 @@ const multer = require('multer');
|
||||
|
||||
const {
|
||||
generateApplicationDocuments, generateEmailReply, generateFeinschliff, renderDesignVorschau,
|
||||
DOKUMENT_TYPEN, normalizeDokumente,
|
||||
DOKUMENT_TYPEN, normalizeDokumente, standardDokumente,
|
||||
} = require('./lib/documents');
|
||||
const chat = require('./lib/chat');
|
||||
const websuche = require('./lib/websuche');
|
||||
@@ -2564,16 +2564,19 @@ initializeDatabase().then(async () => {
|
||||
anhaenge,
|
||||
interneAnhaenge,
|
||||
emails,
|
||||
// Last choice of documents (defaults to both), for pre-ticking the form.
|
||||
dokumentAuswahl: normalizeDokumente(
|
||||
application.generierung_dokumente ? String(application.generierung_dokumente).split(',') : null
|
||||
),
|
||||
// Last choice of documents for this application; if there is none yet, the
|
||||
// user's preselection from the settings (default: both) pre-ticks the form.
|
||||
dokumentAuswahl: application.generierung_dokumente
|
||||
? normalizeDokumente(String(application.generierung_dokumente).split(','))
|
||||
: standardDokumente(),
|
||||
mailConfigured: mailer.isConfigured(),
|
||||
mailFrom: mailer.isConfigured() ? mailer.fromField() : '',
|
||||
mailError: req.query.mailerror ? String(req.query.mailerror) : '',
|
||||
mailOk: req.query.mailok ? String(req.query.mailok) : '',
|
||||
basisCount: basisCountRow ? basisCountRow.count : 0,
|
||||
basisAnhaenge,
|
||||
// Vorausgewählte Anlagen aus den Einstellungen (Standard: keine).
|
||||
anlagenAuswahl: config.anlagenDefaultIds(),
|
||||
termine,
|
||||
caldavConfigured: caldav.isConfigured(),
|
||||
caldavTz: caldav.TZ,
|
||||
@@ -3868,12 +3871,25 @@ initializeDatabase().then(async () => {
|
||||
// Alle Konfigurationswerte (Ollama, E-Mail, CalDAV, REST-API) liegen in der
|
||||
// app_state-Tabelle und sind hier editierbar. Speichern wirkt sofort, ein
|
||||
// Neustart ist nicht nötig (die Libs lesen per config.get() zur Laufzeit).
|
||||
app.get('/einstellungen', (req, res) => {
|
||||
res.render('settings', {
|
||||
felder: config.FIELDS,
|
||||
werte: config.getAll(),
|
||||
hideSettings: true,
|
||||
});
|
||||
app.get('/einstellungen', async (req, res) => {
|
||||
try {
|
||||
// Optionen, die erst zur Laufzeit feststehen (Feld-Definition: optionsFrom).
|
||||
const anlagen = await dbAll(
|
||||
'SELECT id, name, dateiname FROM basis_anhaenge WHERE user_id = ? ORDER BY id ASC',
|
||||
[uid()]
|
||||
);
|
||||
res.render('settings', {
|
||||
felder: config.FIELDS,
|
||||
werte: config.getAll(),
|
||||
auswahllisten: {
|
||||
anlagen: anlagen.map((a) => ({ value: String(a.id), label: a.name || a.dateiname })),
|
||||
},
|
||||
hideSettings: true,
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('Error loading settings:', error);
|
||||
res.status(500).send('Serverfehler');
|
||||
}
|
||||
});
|
||||
|
||||
app.post('/einstellungen', async (req, res) => {
|
||||
@@ -3881,7 +3897,18 @@ initializeDatabase().then(async () => {
|
||||
const werte = {};
|
||||
for (const sektion of config.FIELDS) {
|
||||
for (const f of sektion.items) {
|
||||
werte[f.key] = req.body[f.key] != null ? String(req.body[f.key]) : '';
|
||||
const roh = req.body[f.key];
|
||||
if (f.type === 'checkboxes') {
|
||||
// Checkbox-Gruppe: Express liefert je nach Anzahl Häkchen einen String
|
||||
// oder ein Array (inkl. des leeren Hidden-Werts) — als Komma-Liste ablegen.
|
||||
werte[f.key] = []
|
||||
.concat(roh == null ? [] : roh)
|
||||
.map((v) => String(v).trim())
|
||||
.filter(Boolean)
|
||||
.join(',');
|
||||
} else {
|
||||
werte[f.key] = roh != null ? String(roh) : '';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user