package v1 import ( "net/http" "github.com/gin-gonic/gin" "github.com/gochat/gochat/internal/service" "github.com/gochat/gochat/pkg/response" ) // WidgetTestHandler handles read-only WidgetTest endpoints (platform scope, super-admin). // Reference: Chatwoot resources :widget_tests, only: [:index] — not available in production. // Returns test data for widget/UI integration testing. type WidgetTestHandler struct { svc *service.WidgetTestService } // NewWidgetTestHandler creates a new WidgetTestHandler with service injection. func NewWidgetTestHandler(svc *service.WidgetTestService) *WidgetTestHandler { return &WidgetTestHandler{svc: svc} } // Index retrieves all widget test scenarios (list all). // GET /platform/api/v1/widget_tests func (h *WidgetTestHandler) Index(c *gin.Context) { tests, err := h.svc.List(c.Request.Context()) if err != nil { handleServiceError(c, err) return } response.OK(c, tests) } // ListByType retrieves widget test scenarios filtered by type. // GET /platform/api/v1/widget_tests/:type func (h *WidgetTestHandler) ListByType(c *gin.Context) { typ := c.Param("type") if typ == "" { response.AbortWithStatusError(c, http.StatusBadRequest, response.ErrBadRequest, "type parameter is required") return } tests, err := h.svc.ListByType(c.Request.Context(), typ) if err != nil { handleServiceError(c, err) return } response.OK(c, tests) } // RegisterWidgetTestRoutes registers widget_test routes on a Gin router group. // Reference: Chatwoot resources :widget_tests, only: [:index] — platform scope (super-admin). func RegisterWidgetTestRoutes(g *gin.RouterGroup, h *WidgetTestHandler) { widgetTests := g.Group("/widget_tests") { widgetTests.GET("/", h.Index) widgetTests.GET("/:type", h.ListByType) } }