package handler import ( "net/http" "spider/internal/model" "github.com/gin-gonic/gin" "gorm.io/gorm" ) // ConfigHandler handles managed settings. type ConfigHandler struct { db *gorm.DB } // ListSettings returns all settings. // GET /config/settings func (h *ConfigHandler) ListSettings(c *gin.Context) { var settings []model.ManagedSetting if err := h.db.Order("key_name ASC").Find(&settings).Error; err != nil { Fail(c, 500, err.Error()) return } OK(c, settings) } // UpdateSetting updates a setting by key and records an audit revision. // PUT /config/settings/:key func (h *ConfigHandler) UpdateSetting(c *gin.Context) { key := c.Param("key") if key == "" { Fail(c, http.StatusBadRequest, "key is required") return } var body struct { Value string `json:"value" binding:"required"` Description string `json:"description"` } if err := c.ShouldBindJSON(&body); err != nil { Fail(c, http.StatusBadRequest, err.Error()) return } var setting model.ManagedSetting if err := h.db.Where("key_name = ?", key).First(&setting).Error; err != nil { Fail(c, 404, "setting not found") return } oldValue := setting.Value updates := map[string]interface{}{ "value": body.Value, } if body.Description != "" { updates["description"] = body.Description } if err := h.db.Model(&setting).Updates(updates).Error; err != nil { Fail(c, 500, err.Error()) return } // Record audit revision. revision := model.ConfigRevision{ SettingKey: key, OldValue: oldValue, NewValue: body.Value, ChangedBy: "admin", } h.db.Create(&revision) h.db.Where("key_name = ?", key).First(&setting) OK(c, setting) }