veza/veza-backend-api/internal/handlers/feature_flag_handler.go

53 lines
1.3 KiB
Go

package handlers
import (
"net/http"
"github.com/gin-gonic/gin"
"veza-backend-api/internal/services"
)
// FeatureFlagHandler handles feature flag endpoints (v0.803 ADM1-05)
type FeatureFlagHandler struct {
svc *services.FeatureFlagService
}
// NewFeatureFlagHandler creates a new FeatureFlagHandler
func NewFeatureFlagHandler(svc *services.FeatureFlagService) *FeatureFlagHandler {
return &FeatureFlagHandler{svc: svc}
}
// List returns all feature flags (admin)
func (h *FeatureFlagHandler) List(c *gin.Context) {
list, err := h.svc.List(c.Request.Context())
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to list feature flags"})
return
}
c.JSON(http.StatusOK, gin.H{"feature_flags": list})
}
// Toggle enables or disables a feature flag (admin)
func (h *FeatureFlagHandler) Toggle(c *gin.Context) {
name := c.Param("name")
if name == "" {
c.JSON(http.StatusBadRequest, gin.H{"error": "name is required"})
return
}
var req struct {
Enabled bool `json:"enabled"`
}
if err := c.ShouldBindJSON(&req); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "enabled is required"})
return
}
flag, err := h.svc.Toggle(c.Request.Context(), name, req.Enabled)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
c.JSON(http.StatusOK, flag)
}