package interfaces import ( "net/http" "mengstack/internal/kernel/response" "mengstack/internal/modules/settings/application" "mengstack/internal/modules/settings/domain" "github.com/gin-gonic/gin" ) type Handler struct { svc *application.Service } func NewHandler(svc *application.Service) *Handler { return &Handler{svc: svc} } func (h *Handler) GetGlobalSetting(c *gin.Context) { key := c.Param("key") setting, err := h.svc.GetGlobalSetting(c.Request.Context(), key) if err != nil { response.HandleError(c, err) return } if setting == nil { response.Fail(c, response.NewBadRequest("setting not found")) return } response.Success(c, setting) } func (h *Handler) UpdateGlobalSetting(c *gin.Context) { key := c.Param("key") var req domain.UpdateSettingRequest if err := c.ShouldBindJSON(&req); err != nil { response.Fail(c, response.NewBadRequest("invalid request: "+err.Error())) return } userID := c.GetUint("user_id") if err := h.svc.UpdateGlobalSetting(c.Request.Context(), key, &req, userID); err != nil { response.HandleError(c, err) return } response.Success(c, nil) } func (h *Handler) ListGlobalSettings(c *gin.Context) { settings, err := h.svc.ListGlobalSettings(c.Request.Context()) if err != nil { response.HandleError(c, err) return } response.Success(c, settings) } func (h *Handler) GetTenantSetting(c *gin.Context) { key := c.Param("key") tenantID := c.GetString("tenant_id") setting, err := h.svc.GetTenantSetting(c.Request.Context(), tenantID, key) if err != nil { response.HandleError(c, err) return } if setting == nil { response.Fail(c, response.NewBadRequest("setting not found")) return } response.Success(c, setting) } func (h *Handler) UpdateTenantSetting(c *gin.Context) { key := c.Param("key") tenantID := c.GetString("tenant_id") var req domain.UpdateSettingRequest if err := c.ShouldBindJSON(&req); err != nil { response.Fail(c, response.NewBadRequest("invalid request: "+err.Error())) return } userID := c.GetUint("user_id") if err := h.svc.UpdateTenantSetting(c.Request.Context(), tenantID, key, &req, userID); err != nil { response.HandleError(c, err) return } response.Success(c, nil) } func (h *Handler) ListTenantSettings(c *gin.Context) { tenantID := c.GetString("tenant_id") settings, err := h.svc.ListTenantSettings(c.Request.Context(), tenantID) if err != nil { response.HandleError(c, err) return } response.Success(c, settings) } func (h *Handler) DeleteTenantSetting(c *gin.Context) { key := c.Param("key") tenantID := c.GetString("tenant_id") if err := h.svc.DeleteTenantSetting(c.Request.Context(), tenantID, key); err != nil { response.HandleError(c, err) return } c.JSON(http.StatusOK, gin.H{"code": 0, "message": "deleted"}) }