Browse Source

完成多对多

yjp 1 year ago
parent
commit
2a590ecec2

+ 10 - 2
convenient/binding/bind_item.go

@@ -9,6 +9,7 @@ import (
 	"git.sxidc.com/service-supports/fserr"
 	"net/http"
 	"reflect"
+	"strings"
 )
 
 func Bind[O any](binder *Binder, item *BindItem[O], middlewares ...api.Handler) {
@@ -39,11 +40,18 @@ func (item *BindItem[O]) bind(binder *Binder, middlewares ...api.Handler) {
 	}
 
 	var outputZero O
-	outputZeroType := reflect.TypeOf(outputZero)
-	if outputZeroType != nil && outputZeroType.Kind() == reflect.Pointer {
+	outputZeroValue := reflect.ValueOf(outputZero)
+	if outputZeroValue.IsValid() && outputZeroValue.Kind() == reflect.Pointer {
 		panic("bind的输出类型不能使用指针类型")
 	}
 
+	if outputZeroValue.IsValid() && strings.Contains(outputZeroValue.String(), "response.InfosData") {
+		infosField := outputZeroValue.FieldByName("Infos")
+		if infosField.IsValid() && infosField.Type().Elem().Kind() == reflect.Pointer {
+			panic("bind的输出类型不能使用指针类型")
+		}
+	}
+
 	// 给单个路由增加中间件
 	handlers := []api.Handler{
 		func(c *api.Context) {

+ 4 - 4
convenient/binding/response/response.go

@@ -17,14 +17,14 @@ func SendMsgResponse(c *api.Context, statusCode int, _ any, err error) {
 	c.JSON(statusCode, msgResp)
 }
 
-type IDResponse[T IDType] struct {
+type IDResponse struct {
 	MsgResponse
-	ID T `json:"id"`
+	ID string `json:"id"`
 }
 
-func SendIDResponse[T IDType](c *api.Context, statusCode int, id T, err error) {
+func SendIDResponse(c *api.Context, statusCode int, id string, err error) {
 	msgResp := formMsgResponse(err)
-	c.JSON(statusCode, IDResponse[T]{
+	c.JSON(statusCode, IDResponse{
 		MsgResponse: msgResp,
 		ID:          id,
 	})

+ 0 - 5
convenient/binding/response/response_type.go

@@ -1,5 +0,0 @@
-package response
-
-type IDType interface {
-	~string | ~uint64
-}

+ 3 - 3
convenient/entity/simple.go

@@ -46,9 +46,9 @@ func (simple *Simple[I]) bind(binder *binding.Binder) {
 	// 创建
 	if !options.disableCreate {
 		if !options.createNeedTx {
-			binding.PostBind(binder, &binding.SimpleBindItem[string]{
+			binding.PostBind[string](binder, &binding.SimpleBindItem[string]{
 				Path:          domainPath + "/create",
-				ResponseFunc:  response.SendIDResponse[string],
+				ResponseFunc:  response.SendIDResponse,
 				RequestParams: simple.CreateJsonBody,
 				Objects:       []domain.Object{simple.Entity},
 				ServiceFunc:   Create(tableName, options.createCallbacks),
@@ -56,7 +56,7 @@ func (simple *Simple[I]) bind(binder *binding.Binder) {
 		} else {
 			binding.PostBind(binder, &binding.SimpleBindItem[string]{
 				Path:          domainPath + "/create",
-				ResponseFunc:  response.SendIDResponse[string],
+				ResponseFunc:  response.SendIDResponse,
 				RequestParams: simple.CreateJsonBody,
 				Objects:       []domain.Object{simple.Entity},
 				ServiceFunc:   CreateTx(tableName, options.createCallbacks),

+ 1 - 1
examples/examples/project/application/service/student_and_identity.go

@@ -21,7 +21,7 @@ func (app *StudentAndIdentity) Destroy() error {
 func (app *StudentAndIdentity) v1(appInstance *application.App) {
 	v1Binder := appInstance.Binder(application.RouterPrefix, "v1")
 
-	many2many.BindSimple(v1Binder, &many2many.Simple[student.Info, *identity.Info]{
+	many2many.BindSimple(v1Binder, &many2many.Simple[student.Info, identity.Info]{
 		Left:                  &student.Entity{},
 		Right:                 &identity.Entity{},
 		Schema:                dbSchema,