package widget import ( "context" "donat-widget/internal/model" "github.com/labstack/echo/v4" "log/slog" "strconv" ) // CreateWidget // // @Description Create widget // @Tags Widget // @Accept json // @Produce json // @Param RegisterData body CreateWidgetRequest true "Create widget" // @Success 200 {object} CreateWidgetResponse // @Router /api/widget/create [post] func CreateWidget(widgetService model.WidgetService) echo.HandlerFunc { return func(request echo.Context) error { ctx := context.Background() var widgetData CreateWidgetRequest if err := request.Bind(&widgetData); err != nil { return echo.NewHTTPError(400, err.Error()) } err := request.Validate(&widgetData) if err != nil { return echo.NewHTTPError(400, err.Error()) } widgetID, err := widgetService.CreateWidget( ctx, widgetData.StreamerID, widgetData.TemplateID, ) if err != nil { return request.JSON(422, "Create widget error") } response := CreateWidgetResponse{ WidgetID: widgetID, } slog.Info("Widget created") return request.JSON(200, response) } } // GetWidgetHTML @Description Get widget // // @Tags Widget // @Accept json // @Produce json // @Success 200 // @Router /api/widget/html/{widgetID} [get] func GetWidgetHTML(widgetService model.WidgetService) echo.HandlerFunc { return func(request echo.Context) error { ctx := context.Background() widgetID, err := strconv.Atoi(request.Param("widgetID")) if err != nil { return echo.NewHTTPError(400, "Path parameter 'widgetID' is invalid") } widgetHTML, err := widgetService.GetWidgetHTML( ctx, model.WidgetID(widgetID), ) if err != nil { return request.JSON(500, "Get widget HTML error") } slog.Info("Get widget HTML successfully") return request.HTML(200, string(widgetHTML)) } } // GetWidgetInfo // // @Description Widget Info // @Tags Widget // @Accept json // @Produce json // @Param widgetID path int true "Widget ID" // @Router /api/widget/info/{widgetID} [get] func GetWidgetInfo(widgetService model.WidgetService) echo.HandlerFunc { return func(request echo.Context) error { ctx := context.Background() widgetID, err := strconv.Atoi(request.Param("widgetID")) if err != nil { return echo.NewHTTPError(400, "Path parameter 'widgetID' is invalid") } donatAndWidget, err := widgetService.GetWidgetInfo(ctx, model.WidgetID(widgetID)) if err != nil { return request.JSON(422, "Get widget info error") } if !donatAndWidget.Display { response := GetWidgetInfoResponse{ Display: donatAndWidget.Display, } slog.Info("Get widget info successfully") return request.JSON(200, response) } response := GetWidgetInfoResponse{ AudioUrl: donatAndWidget.Widget.AudioUrl, ImageUrl: donatAndWidget.Widget.ImageUrl, Text: donatAndWidget.Donat.Text, Display: donatAndWidget.Display, Duration: donatAndWidget.Widget.Duration, DonatUser: donatAndWidget.Donat.DonatUser, Amount: donatAndWidget.Donat.Amount, DonatID: donatAndWidget.Donat.ID, } slog.Info("Get widget info successfully") return request.JSON(200, response) } } // UpdateDuration // // @Description UpdateDuration // @Tags Widget // @Accept json // @Produce json // @Param UpdateData body UpdateDurationRequest true "UpdateDuration" // @Success 200 // @Router /api/widget/duration/update [post] func UpdateDuration(widgetService model.WidgetService) echo.HandlerFunc { return func(request echo.Context) error { ctx := context.Background() var widgetData UpdateDurationRequest if err := request.Bind(&widgetData); err != nil { return echo.NewHTTPError(400, err.Error()) } err := request.Validate(&widgetData) if err != nil { return echo.NewHTTPError(400, err.Error()) } err = widgetService.UpdateDuration( ctx, widgetData.WidgetID, widgetData.Duration, ) if err != nil { return request.JSON(422, "Update duration error") } slog.Info("Duration updated") return request.JSON(200, "Update duration successfully") } }