yjp 1 år sedan
förälder
incheckning
ad4c755852
7 ändrade filer med 49 tillägg och 57 borttagningar
  1. 0 17
      api/context.go
  2. 1 1
      api/router.go
  3. 13 12
      binding/binding.go
  4. 2 26
      binding/dto.go
  5. 30 0
      binding/dto_func.go
  6. 2 0
      domain/object.go
  7. 1 1
      examples/binding/main.go

+ 0 - 17
api/context.go

@@ -1,8 +1,6 @@
 package api
 
 import (
-	"git.sxidc.com/go-tools/utils/strutils"
-	"git.sxidc.com/service-supports/fserr"
 	"git.sxidc.com/service-supports/fslog"
 	"github.com/gin-gonic/gin"
 	"io"
@@ -13,21 +11,6 @@ type Context struct {
 	*gin.Context
 }
 
-// GetPathParams 根据给定的路径参数名字获取参数值
-func (c *Context) GetPathParams(pathParamNames []string) ([]string, error) {
-	pathParamValues := make([]string, 0)
-	for _, paramName := range pathParamNames {
-		paramValue := c.Param(paramName)
-		if strutils.IsStringEmpty(paramValue) {
-			return nil, fserr.New("没有传递路径参数" + paramName)
-		}
-
-		pathParamValues = append(pathParamValues, paramValue)
-	}
-
-	return pathParamValues, nil
-}
-
 // GetFileHeaderBytes 获取传递的文件名和文件内容
 func (c *Context) GetFileHeaderBytes(fileHeader *multipart.FileHeader) (string, []byte, error) {
 	file, err := fileHeader.Open()

+ 1 - 1
api/router.go

@@ -11,7 +11,7 @@ type Router interface {
 	AddMiddlewares(middlewares ...Handler) Router
 	RegisterVersionedRouter(version string, middlewares ...Handler) Router
 	GetVersionedRouter(version string) Router
-	AddRoute(relativePath string, method string, middlewares ...Handler) Router
+	AddRoute(method string, relativePath string, middlewares ...Handler) Router
 	Static(relativePath string, root string)
 	StaticFile(relativePath string, filepath string)
 	BasePath() string

+ 13 - 12
binding/binding.go

@@ -51,10 +51,10 @@ type SimpleBindItem[O any] struct {
 	DTO DTO
 
 	// 可选的dto绑定函数
-	// 非必传,POST和PUT请求默认为JsonBody,DELETE默认为PathParams,Get默认为QueryParams
+	// 非必传,POST和PUT请求默认为JsonBody,DELETE默认为PathParams,GET默认为QueryParams
 	// 额外还提供了一些转化函数:
 	// MultipartForm: 绑定multipart form
-	// Form: 绑定form body
+	// FormBody: 绑定form body
 	// XMLBody: 绑定XML body
 	DTOBindFunc DTOBindFunc
 
@@ -69,7 +69,6 @@ type SimpleBindItem[O any] struct {
 	Objects []domain.Object
 
 	// 应用服务泛型函数
-	// 非必传,为nil时相当于使用了SmartUI
 	ServiceFunc ServiceFunc[O]
 
 	// 响应泛型函数,如果不响应,需要使用NoResponse零值占位
@@ -104,6 +103,10 @@ func (item *BindItem[O]) bind(router api.Router, middlewares ...api.Handler) {
 		panic("需要指定响应函数")
 	}
 
+	if item.ServiceFunc == nil {
+		panic("需要指定应用服务函数")
+	}
+
 	// 给单个路由增加中间件
 	handlers := []api.Handler{
 		func(c *api.Context) {
@@ -164,17 +167,15 @@ func (item *BindItem[O]) bind(router api.Router, middlewares ...api.Handler) {
 			}
 
 			// 执行业务函数
-			if item.ServiceFunc != nil {
-				statusCode := http.StatusOK
-
-				outputModel, err := item.ServiceFunc(c, dto, domainObjects)
-				if err != nil {
-					statusCode = fserr.ParseCode(err).HttpCode
-				}
+			statusCode := http.StatusOK
 
-				item.ResponseFunc(c, statusCode, outputModel, err)
-				return
+			outputModel, err := item.ServiceFunc(c, dto, domainObjects)
+			if err != nil {
+				statusCode = fserr.ParseCode(err).HttpCode
 			}
+
+			item.ResponseFunc(c, statusCode, outputModel, err)
+			return
 		},
 	}
 

+ 2 - 26
binding/dto.go

@@ -1,13 +1,13 @@
 package binding
 
 import (
-	"git.sxidc.com/go-framework/baize/api"
 	"git.sxidc.com/service-supports/fserr"
-	"github.com/gin-gonic/gin/binding"
 )
 
 type DTO interface{}
 
+// TODO 添加简化函数,通过字段名称设置和获取值
+
 func ToConcreteDTO[T DTO](object DTO) (T, error) {
 	concrete, ok := object.(T)
 	if !ok {
@@ -17,27 +17,3 @@ func ToConcreteDTO[T DTO](object DTO) (T, error) {
 
 	return concrete, nil
 }
-
-func JsonBody(c *api.Context, dto DTO) error {
-	return c.ShouldBindJSON(dto)
-}
-
-func QueryParams(c *api.Context, dto DTO) error {
-	return c.ShouldBindQuery(dto)
-}
-
-func PathParams(c *api.Context, dto DTO) error {
-	return c.ShouldBindUri(dto)
-}
-
-func MultipartForm(c *api.Context, dto DTO) error {
-	return c.ShouldBindWith(dto, binding.FormMultipart)
-}
-
-func Form(c *api.Context, dto DTO) error {
-	return c.ShouldBindWith(dto, binding.Form)
-}
-
-func XMLBody(c *api.Context, dto DTO) error {
-	return c.ShouldBindXML(dto)
-}

+ 30 - 0
binding/dto_func.go

@@ -0,0 +1,30 @@
+package binding
+
+import (
+	"git.sxidc.com/go-framework/baize/api"
+	"github.com/gin-gonic/gin/binding"
+)
+
+func JsonBody(c *api.Context, dto DTO) error {
+	return c.ShouldBindJSON(dto)
+}
+
+func QueryParams(c *api.Context, dto DTO) error {
+	return c.ShouldBindQuery(dto)
+}
+
+func PathParams(c *api.Context, dto DTO) error {
+	return c.ShouldBindUri(dto)
+}
+
+func MultipartForm(c *api.Context, dto DTO) error {
+	return c.ShouldBindWith(dto, binding.FormMultipart)
+}
+
+func FormBody(c *api.Context, dto DTO) error {
+	return c.ShouldBindWith(dto, binding.Form)
+}
+
+func XMLBody(c *api.Context, dto DTO) error {
+	return c.ShouldBindXML(dto)
+}

+ 2 - 0
domain/object.go

@@ -9,6 +9,8 @@ type IDType interface {
 type Object interface {
 }
 
+// TODO 添加简化函数,通过字段名称设置和获取值
+
 func ToConcreteObject[T Object](object Object) (T, error) {
 	concrete, ok := object.(T)
 	if !ok {

+ 1 - 1
examples/binding/main.go

@@ -45,7 +45,7 @@ type ClassInfo struct {
 	Name string `json:"name"`
 }
 
-var classMap = make(map[string]*Class, 0)
+var classMap = make(map[string]*Class)
 
 func main() {
 	app := baize.NewApplication(application.Config{