Feature: System settings in DB - configurable backend URLs and API key
This commit is contained in:
@@ -216,6 +216,17 @@ func (d *Database) migrate() error {
|
||||
)`)
|
||||
d.db.Exec(`CREATE INDEX IF NOT EXISTS idx_audit_log_timestamp ON audit_log(timestamp DESC)`)
|
||||
|
||||
// System Settings Tabelle
|
||||
d.db.Exec(`CREATE TABLE IF NOT EXISTS system_settings (
|
||||
key TEXT PRIMARY KEY,
|
||||
value TEXT NOT NULL,
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
)`)
|
||||
// Default-Keys anlegen (leere Werte)
|
||||
for _, k := range []string{"backend_url_internal", "backend_url_external", "api_key"} {
|
||||
d.db.Exec(`INSERT INTO system_settings (key, value) VALUES ($1, '') ON CONFLICT DO NOTHING`, k)
|
||||
}
|
||||
|
||||
// Retention Policy (90 Tage)
|
||||
d.setupRetention()
|
||||
|
||||
@@ -1197,6 +1208,42 @@ func (d *Database) GetAuditLogs(limit int, offset int, action string, agentID st
|
||||
return entries, total, rows.Err()
|
||||
}
|
||||
|
||||
// --- System Settings ---
|
||||
|
||||
func (d *Database) GetSettings() (map[string]string, error) {
|
||||
rows, err := d.db.Query("SELECT key, value FROM system_settings ORDER BY key")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
settings := make(map[string]string)
|
||||
for rows.Next() {
|
||||
var k, v string
|
||||
if err := rows.Scan(&k, &v); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
settings[k] = v
|
||||
}
|
||||
return settings, rows.Err()
|
||||
}
|
||||
|
||||
func (d *Database) GetSetting(key string) (string, error) {
|
||||
var value string
|
||||
err := d.db.QueryRow("SELECT value FROM system_settings WHERE key = $1", key).Scan(&value)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return value, nil
|
||||
}
|
||||
|
||||
func (d *Database) SetSetting(key, value string) error {
|
||||
_, err := d.db.Exec(`
|
||||
INSERT INTO system_settings (key, value, updated_at) VALUES ($1, $2, NOW())
|
||||
ON CONFLICT (key) DO UPDATE SET value = EXCLUDED.value, updated_at = NOW()
|
||||
`, key, value)
|
||||
return err
|
||||
}
|
||||
|
||||
func (d *Database) MigrateConfigAPIKeys(configKeys []string) {
|
||||
for _, key := range configKeys {
|
||||
var exists bool
|
||||
|
||||
Reference in New Issue
Block a user