2024-09-27 13:50:20 +05:00

160 lines
4.0 KiB
Go

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")
}
}