| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- 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)
- }
|