53 lines
1.2 KiB
Go
53 lines
1.2 KiB
Go
package widget
|
|
|
|
import (
|
|
"context"
|
|
"github.com/labstack/echo/v4"
|
|
"log/slog"
|
|
"strconv"
|
|
)
|
|
|
|
type requestModel struct {
|
|
UserId int `json:"userId" validate:"required"`
|
|
}
|
|
|
|
type responseModel struct {
|
|
WidgetId int `json:"widgetId"`
|
|
}
|
|
|
|
type Creator interface {
|
|
Create(ctx context.Context, userId int) (int, error)
|
|
}
|
|
|
|
// Create @Description Create widget
|
|
//
|
|
// @Tags Widget
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Param RegisterData body requestModel true "Create widget"
|
|
// @Success 200 {object} responseModel
|
|
// @Router /api/widget/create [post]
|
|
func Create(service Creator, log *slog.Logger) echo.HandlerFunc {
|
|
return func(request echo.Context) error {
|
|
ctx := context.Background()
|
|
var widgetData requestModel
|
|
if err := request.Bind(&widgetData); err != nil {
|
|
slog.Error(err.Error())
|
|
return echo.NewHTTPError(400, err.Error())
|
|
}
|
|
|
|
err := request.Validate(&widgetData)
|
|
if err != nil {
|
|
slog.Error(err.Error())
|
|
return echo.NewHTTPError(400, err.Error())
|
|
}
|
|
|
|
id, err := service.Create(ctx, widgetData.UserId)
|
|
if err != nil {
|
|
slog.Error(err.Error())
|
|
return request.JSON(422, err)
|
|
}
|
|
return request.String(200, strconv.FormatUint(uint64(id), 10))
|
|
}
|
|
}
|