package handlers import ( "net/http" "github.com/gin-gonic/gin" apperrors "veza-backend-api/internal/errors" "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 { RespondWithAppError(c, apperrors.NewInternalErrorWrap("Failed to list feature flags", err)) 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 == "" { RespondWithAppError(c, apperrors.NewValidationError("name is required")) return } var req struct { Enabled bool `json:"enabled"` } if err := c.ShouldBindJSON(&req); err != nil { RespondWithAppError(c, apperrors.NewValidationError("enabled is required")) return } flag, err := h.svc.Toggle(c.Request.Context(), name, req.Enabled) if err != nil { RespondWithAppError(c, apperrors.NewInternalErrorWrap("Failed to toggle feature flag", err)) return } c.JSON(http.StatusOK, flag) }