Add settings management with Bundesland selection and holiday calculations

This commit is contained in:
Felix Schlusche
2025-10-23 02:43:47 +02:00
parent 720b3d2d03
commit b2823731f1
5 changed files with 419 additions and 30 deletions

View File

@@ -40,6 +40,20 @@ try {
console.error('Error during migration:', error);
}
// Create settings table if it doesn't exist
try {
db.exec(`
CREATE TABLE IF NOT EXISTS settings (
key TEXT PRIMARY KEY,
value TEXT NOT NULL,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
)
`);
console.log('Settings table ready');
} catch (error) {
console.error('Error creating settings table:', error);
}
console.log('Database initialized successfully');
// ============================================
@@ -334,6 +348,71 @@ app.get('/api/export', (req, res) => {
}
});
// ============================================
// SETTINGS ENDPOINTS
// ============================================
// Get a setting by key
app.get('/api/settings/:key', (req, res) => {
try {
const { key } = req.params;
const stmt = db.prepare('SELECT value FROM settings WHERE key = ?');
const result = stmt.get(key);
if (!result) {
return res.status(404).json({ error: 'Setting not found' });
}
res.json({ key, value: result.value });
} catch (error) {
console.error('Error getting setting:', error);
res.status(500).json({ error: 'Failed to get setting' });
}
});
// Set a setting
app.post('/api/settings', (req, res) => {
try {
const { key, value } = req.body;
if (!key || value === undefined) {
return res.status(400).json({ error: 'Key and value are required' });
}
const stmt = db.prepare(`
INSERT INTO settings (key, value, updated_at)
VALUES (?, ?, CURRENT_TIMESTAMP)
ON CONFLICT(key) DO UPDATE SET
value = excluded.value,
updated_at = CURRENT_TIMESTAMP
`);
stmt.run(key, value);
res.json({ key, value });
} catch (error) {
console.error('Error setting setting:', error);
res.status(500).json({ error: 'Failed to set setting' });
}
});
// Get all settings
app.get('/api/settings', (req, res) => {
try {
const stmt = db.prepare('SELECT key, value FROM settings');
const settings = stmt.all();
const result = {};
settings.forEach(s => {
result[s.key] = s.value;
});
res.json(result);
} catch (error) {
console.error('Error getting settings:', error);
res.status(500).json({ error: 'Failed to get settings' });
}
});
// Start server
app.listen(PORT, () => {
console.log(`Server is running on http://localhost:${PORT}`);