package api import ( "errors" "net/http" "github.com/gin-gonic/gin" "ws_usernode/internal/service" ) // SettingsHandler 系统设置接口(admin,PLAN F7)。 type SettingsHandler struct { svc *service.SettingService } // NewSettingsHandler 创建设置 handler。 func NewSettingsHandler(svc *service.SettingService) *SettingsHandler { return &SettingsHandler{svc: svc} } // List GET /settings —— 全部设置项(config 默认值 + settings 覆盖)。 func (h *SettingsHandler) List(c *gin.Context) { items, err := h.svc.GetAll(c.Request.Context()) if err != nil { fail(c, http.StatusInternalServerError, err.Error()) return } ok(c, gin.H{"items": items}) } // SettingUpdateRequest 更新单个设置项。 type SettingUpdateRequest struct { Key string `json:"key" binding:"required"` Value string `json:"value" binding:"required"` } // Update PUT /settings —— 更新设置项(仅白名单 key,值为时长格式)。 func (h *SettingsHandler) Update(c *gin.Context) { var req SettingUpdateRequest if err := c.ShouldBindJSON(&req); err != nil { fail(c, http.StatusBadRequest, "请求参数不合法: "+err.Error()) return } if err := h.svc.Set(c.Request.Context(), req.Key, req.Value); err != nil { switch { case errors.Is(err, service.ErrSettingKeyUnknown): fail(c, http.StatusBadRequest, err.Error()) case errors.Is(err, service.ErrSettingValueInvalid): fail(c, http.StatusBadRequest, err.Error()) default: fail(c, http.StatusInternalServerError, err.Error()) } return } ok(c, gin.H{"status": "updated", "key": req.Key, "value": req.Value}) }