mirror of
https://github.com/keven1024/015.git
synced 2026-05-26 07:08:02 +00:00
refactor(http): simplify HTTPBaseResponse options by removing interface and using functional options directly
This commit is contained in:
@@ -6,40 +6,36 @@ import (
|
||||
"github.com/labstack/echo/v5"
|
||||
)
|
||||
|
||||
type Option interface {
|
||||
applyTo(*HTTPBaseResponse)
|
||||
}
|
||||
|
||||
type HTTPBaseResponse struct {
|
||||
code int
|
||||
message string
|
||||
data map[string]any
|
||||
}
|
||||
|
||||
type HTTPBaseResponseProps func(props *HTTPBaseResponse) error
|
||||
type HTTPBaseResponseProps func(props *HTTPBaseResponse)
|
||||
|
||||
type WithCode int
|
||||
|
||||
func (o WithCode) applyTo(props *HTTPBaseResponse) {
|
||||
props.code = int(o)
|
||||
func WithCode(data int) HTTPBaseResponseProps {
|
||||
return func(props *HTTPBaseResponse) {
|
||||
props.code = data
|
||||
}
|
||||
}
|
||||
|
||||
type WithMessage string
|
||||
|
||||
func (o WithMessage) applyTo(props *HTTPBaseResponse) {
|
||||
props.message = string(o)
|
||||
func WithMessage(data string) HTTPBaseResponseProps {
|
||||
return func(props *HTTPBaseResponse) {
|
||||
props.message = data
|
||||
}
|
||||
}
|
||||
|
||||
type WithData map[string]any
|
||||
|
||||
func (o WithData) applyTo(props *HTTPBaseResponse) {
|
||||
props.data = o
|
||||
func WithData(data map[string]any) HTTPBaseResponseProps {
|
||||
return func(props *HTTPBaseResponse) {
|
||||
props.data = data
|
||||
}
|
||||
}
|
||||
|
||||
func HTTPBaseHandler(c *echo.Context, options ...Option) error {
|
||||
func HTTPBaseHandler(c *echo.Context, options ...HTTPBaseResponseProps) error {
|
||||
props := HTTPBaseResponse{code: http.StatusOK, message: "success", data: map[string]any{}}
|
||||
for _, option := range options {
|
||||
option.applyTo(&props)
|
||||
option(&props)
|
||||
}
|
||||
|
||||
return c.JSON(props.code, map[string]any{
|
||||
@@ -50,9 +46,11 @@ func HTTPBaseHandler(c *echo.Context, options ...Option) error {
|
||||
}
|
||||
|
||||
func HTTPSuccessHandler(c *echo.Context, data map[string]any, options ...HTTPBaseResponseProps) error {
|
||||
return HTTPBaseHandler(c, WithData(data))
|
||||
options = append([]HTTPBaseResponseProps{WithData(data)}, options...)
|
||||
return HTTPBaseHandler(c, options...)
|
||||
}
|
||||
|
||||
func HTTPErrorHandler(c *echo.Context, err error, options ...HTTPBaseResponseProps) error {
|
||||
return HTTPBaseHandler(c, WithMessage(err.Error()), WithCode(http.StatusBadRequest))
|
||||
options = append([]HTTPBaseResponseProps{WithMessage(err.Error()), WithCode(http.StatusBadRequest)}, options...)
|
||||
return HTTPBaseHandler(c, options...)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user