package widget import ( "context" "donat-widget/internal/model" "donat-widget/pkg/validator" "github.com/labstack/echo/v4" "log/slog" "net/http" ) // CreateWidget godoc // @Summary Create new widget // @Description Create new widget // @Tags GetWidgetDb // @Accept json // @Produce json // @Security BearerAuth // @Param request body model.CreateWidgetBody true "Create widget" // @Success 200 {string} string "GetWidgetDb has been created successfully!" // @Failure 400 {object} echo.HTTPError "Bad request" // @Failure 401 {object} echo.HTTPError "Unauthorized or expired token" // @Failure 422 {object} echo.HTTPError "Validation error" // @Router /widgets [post] func CreateWidget(widgetService model.WidgetService) echo.HandlerFunc { return func(request echo.Context) error { ctx := context.Background() var body model.CreateWidgetBody err := validator.ParseAndValidate(&body, request) authData, err := widgetService.CheckToken(request) if err != nil { slog.Error(err.Error()) return echo.NewHTTPError(http.StatusUnauthorized, err.Error()) } widgetID, err := widgetService.CreateWidget( ctx, authData.AccountID, body.TemplateID, body.Duration, body.MinAmount, body.MaxAmount, body.Image, body.Audio, body.Name, ) if err != nil { slog.Error(err.Error()) return request.JSON(http.StatusInternalServerError, err.Error()) } response := model.CreateWidgetResponse{ WidgetID: widgetID, } return request.JSON(http.StatusOK, response) } } // GetStreamersWidgets godoc // @Summary Get all streamer's widgets // @Description Get all streamer's widgets // @Tags GetWidgetDb // @Accept json // @Produce json // @Security BearerAuth // @Success 200 {string} string "GetWidgetDb has been created successfully!" // @Failure 400 {object} echo.HTTPError "Bad request" // @Failure 401 {object} echo.HTTPError "Unauthorized or expired token" // @Failure 422 {object} echo.HTTPError "Validation error" // @Router /widgets [get] func GetStreamersWidgets(widgetService model.WidgetService) echo.HandlerFunc { return func(request echo.Context) error { ctx := context.Background() var body model.CreateWidgetBody err := validator.ParseAndValidate(&body, request) authData, err := widgetService.CheckToken(request) if err != nil { slog.Error(err.Error()) return echo.NewHTTPError(http.StatusUnauthorized, err.Error()) } widgets, err := widgetService.GetWidgetsByStreamer( ctx, authData.AccountID, ) if err != nil { slog.Error(err.Error()) return request.JSON(http.StatusInternalServerError, err.Error()) } if widgets == nil { return request.JSON(http.StatusOK, []string{}) } return request.JSON(http.StatusOK, widgets) } } //func GetWidgetHTML(widgetService model.WidgetService) echo.HandlerFunc { // return func(request echo.Context) error { // ctx := context.Background() // // streamerID, err := strconv.Atoi(request.Param("streamerID")) // if err != nil { // slog.Error(err.Error()) // return request.JSON(http.StatusInternalServerError, err.Error()) // } // // widgetHTML, err := widgetService.GetWidgetHTML( // ctx, // model.StreamerID(streamerID), // ) // if err != nil { // slog.Error(err.Error()) // return request.JSON(http.StatusInternalServerError, err.Error()) // } // // slog.Info("Get widget HTML successfully") // return request.HTML(200, string(widgetHTML)) // } //} // //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 { // slog.Error(err.Error()) // return request.JSON(http.StatusInternalServerError, err.Error()) // } // // widget, err := widgetService.GetWidgetByID(ctx, model.WidgetID(widgetID)) // if err != nil { // slog.Error(err.Error()) // return request.JSON(http.StatusInternalServerError, err.Error()) // } // if len(widget) == 0 { // return request.JSON(http.StatusNotFound, "widget not found") // } // // var ResponseWidget = model.WidgetInfoResponse{ // AudioUrl: widget[0].AudioUrl, // ImageUrl: widget[0].ImageUrl, // Duration: widget[0].Duration, // } // // return request.JSON(http.StatusOK, ResponseWidget) // } //} // //func SetMediaFile(widgetService model.WidgetService) echo.HandlerFunc { // return func(request echo.Context) error { // ctx := context.Background() // // widgetID, err := strconv.Atoi(request.FormValue("widgetID")) // if err != nil { // slog.Error(err.Error()) // return request.JSON(http.StatusInternalServerError, err.Error()) // } // // mediaType := request.Param("mediaType") // // file, err := request.FormFile("file") // if err != nil { // slog.Error(err.Error()) // return request.JSON(http.StatusInternalServerError, err.Error()) // } // // src, err := file.Open() // if err != nil { // slog.Error(err.Error()) // return request.JSON(http.StatusInternalServerError, err.Error()) // } // // err = widgetService.SetMediaFile( // ctx, // model.MediaType(mediaType), // model.WidgetID(widgetID), // &src, // file.Filename, // file.Size, // "", // ) // if err != nil { // slog.Error(err.Error()) // return request.JSON(http.StatusInternalServerError, err.Error()) // } // slog.Info("set " + mediaType + " file successfully") // return request.String(200, "File successfully uploaded") // } //} // //func GetMediaFile(widgetService model.WidgetService) echo.HandlerFunc { // return func(request echo.Context) error { // ctx := context.Background() // // mediaType := request.Param("mediaType") // if mediaType != "background" && mediaType != "image" && mediaType != "audio" { // slog.Error("Path parameter 'mediaType' is invalid") // return echo.NewHTTPError(400, "Path parameter 'mediaType' is invalid") // } // // widgetID, err := strconv.Atoi(request.Param("widgetID")) // if err != nil { // slog.Error(err.Error()) // return request.JSON(http.StatusInternalServerError, err.Error()) // } // // file, err := widgetService.GetMediaFile( // ctx, // model.WidgetID(widgetID), // model.MediaType(mediaType), // ) // if err != nil { // slog.Error(err.Error()) // return request.JSON(http.StatusInternalServerError, err.Error()) // } // // slog.Info("get " + mediaType + " file successfully") // return request.Blob(200, "application/octet-stream", file) // } //} // //func SetMediaUrl(widgetService model.WidgetService) echo.HandlerFunc { // type Body struct { // WidgetID model.WidgetID `json:"widgetID" validate:"required"` // MediaUrl model.MediaUrl `json:"mediaUrl" validate:"required"` // } // return func(request echo.Context) error { // ctx := context.Background() // var body Body // if err := request.Bind(&body); err != nil { // slog.Error(err.Error()) // return request.JSON(http.StatusInternalServerError, err.Error()) // } // if err := request.Validate(&body); err != nil { // slog.Error(err.Error()) // return request.JSON(http.StatusInternalServerError, err.Error()) // } // // mediaType := request.Param("mediaType") // // err := widgetService.SetMediaUrl( // ctx, // model.MediaType(mediaType), // body.WidgetID, // body.MediaUrl, // ) // if err != nil { // slog.Error(err.Error()) // return request.JSON(http.StatusInternalServerError, err.Error()) // } // // return request.String(200, "Media URL successfully set") // } //}