package handlers import ( "database/sql" "net/http" "github.com/gin-gonic/gin" ) type SettingsHandler struct { db *sql.DB } func NewSettingsHandler(db *sql.DB) *SettingsHandler { return &SettingsHandler{db: db} } func (h *SettingsHandler) GetSettings(c *gin.Context) { settings := make(map[string]string) rows, err := h.db.Query(`SELECT key, value FROM settings`) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } defer rows.Close() for rows.Next() { var k, v string if rows.Scan(&k, &v) == nil { settings[k] = v } } c.JSON(http.StatusOK, settings) } func (h *SettingsHandler) UpdateSettings(c *gin.Context) { var body map[string]string if err := c.ShouldBindJSON(&body); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": "invalid request body"}) return } tx, err := h.db.Begin() if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } for key, val := range body { _, err := tx.Exec(`INSERT OR REPLACE INTO settings (key, value) VALUES (?, ?)`, key, val) if err != nil { tx.Rollback() c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } } if err := tx.Commit(); err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } c.JSON(http.StatusOK, gin.H{"ok": true}) }