config.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package handler
  2. import (
  3. "net/http"
  4. "spider/internal/model"
  5. "github.com/gin-gonic/gin"
  6. "gorm.io/gorm"
  7. )
  8. // ConfigHandler handles managed settings.
  9. type ConfigHandler struct {
  10. db *gorm.DB
  11. }
  12. // ListSettings returns all settings.
  13. // GET /config/settings
  14. func (h *ConfigHandler) ListSettings(c *gin.Context) {
  15. var settings []model.ManagedSetting
  16. if err := h.db.Order("key_name ASC").Find(&settings).Error; err != nil {
  17. Fail(c, 500, err.Error())
  18. return
  19. }
  20. OK(c, settings)
  21. }
  22. // UpdateSetting updates a setting by key and records an audit revision.
  23. // PUT /config/settings/:key
  24. func (h *ConfigHandler) UpdateSetting(c *gin.Context) {
  25. key := c.Param("key")
  26. if key == "" {
  27. Fail(c, http.StatusBadRequest, "key is required")
  28. return
  29. }
  30. var body struct {
  31. Value string `json:"value" binding:"required"`
  32. Description string `json:"description"`
  33. }
  34. if err := c.ShouldBindJSON(&body); err != nil {
  35. Fail(c, http.StatusBadRequest, err.Error())
  36. return
  37. }
  38. var setting model.ManagedSetting
  39. if err := h.db.Where("key_name = ?", key).First(&setting).Error; err != nil {
  40. Fail(c, 404, "setting not found")
  41. return
  42. }
  43. oldValue := setting.Value
  44. updates := map[string]interface{}{
  45. "value": body.Value,
  46. }
  47. if body.Description != "" {
  48. updates["description"] = body.Description
  49. }
  50. if err := h.db.Model(&setting).Updates(updates).Error; err != nil {
  51. Fail(c, 500, err.Error())
  52. return
  53. }
  54. // Record audit revision.
  55. revision := model.ConfigRevision{
  56. SettingKey: key,
  57. OldValue: oldValue,
  58. NewValue: body.Value,
  59. ChangedBy: "admin",
  60. }
  61. h.db.Create(&revision)
  62. h.db.Where("key_name = ?", key).First(&setting)
  63. OK(c, setting)
  64. }