Quellcode durchsuchen

完成request优化

yjp vor 1 Jahr
Ursprung
Commit
be8b31cbfd

+ 3 - 1
convenient/domain/configuration/api.go

@@ -6,6 +6,7 @@ import (
 	"git.sxidc.com/go-framework/baize/framework/core/api"
 	"git.sxidc.com/go-framework/baize/framework/core/api/request"
 	"git.sxidc.com/go-framework/baize/framework/core/api/response"
+	"git.sxidc.com/go-framework/baize/framework/core/application"
 	"git.sxidc.com/go-framework/baize/framework/core/domain"
 	"git.sxidc.com/go-framework/baize/framework/core/infrastructure"
 	"git.sxidc.com/go-framework/baize/framework/core/infrastructure/database"
@@ -94,7 +95,7 @@ func (simple *Simple) bind(binder *binding.Binder) {
 	}
 }
 
-func BindConfiguration(binder *binding.Binder, simple *Simple, opts ...Option) {
+func BindConfiguration(app *application.App, simple *Simple, opts ...Option) {
 	options := new(Options)
 
 	for _, opt := range opts {
@@ -103,6 +104,7 @@ func BindConfiguration(binder *binding.Binder, simple *Simple, opts ...Option) {
 
 	simple.options = options
 
+	binder := binding.NewBinder(app.Api().ChooseRouter(api.RouterPrefix, ""), app.Infrastructure())
 	simple.bind(binder)
 }
 

+ 3 - 1
convenient/domain/sql_executor/api.go

@@ -5,6 +5,7 @@ import (
 	"git.sxidc.com/go-framework/baize/framework/core/api"
 	"git.sxidc.com/go-framework/baize/framework/core/api/request"
 	"git.sxidc.com/go-framework/baize/framework/core/api/response"
+	"git.sxidc.com/go-framework/baize/framework/core/application"
 	"git.sxidc.com/go-framework/baize/framework/core/domain"
 	"git.sxidc.com/go-framework/baize/framework/core/infrastructure"
 	"git.sxidc.com/go-framework/baize/framework/core/infrastructure/database"
@@ -138,6 +139,7 @@ func (simple *Simple) bind(binder *binding.Binder) {
 	})
 }
 
-func BindSqlExecutor(binder *binding.Binder, simple *Simple) {
+func BindSqlExecutor(app *application.App, simple *Simple) {
+	binder := binding.NewBinder(app.Api().ChooseRouter(api.RouterPrefix, ""), app.Infrastructure())
 	simple.bind(binder)
 }

+ 19 - 1
convenient/domain_gateway/configuration/configuration.go

@@ -5,6 +5,7 @@ import (
 	"git.sxidc.com/go-framework/baize/framework/gateway"
 	"git.sxidc.com/go-tools/utils/strutils"
 	"git.sxidc.com/service-supports/fserr"
+	"github.com/gin-gonic/gin"
 	"net/http"
 	"net/url"
 	"sync"
@@ -28,13 +29,15 @@ func RegisterService(serviceShortName string, baseUrl string) {
 	serviceBaseUrlMap.Store(serviceShortName, baseUrl)
 }
 
-func BuildGateway(builder *gateway.Builder, opts ...Option) {
+func BuildGateway(gw *gateway.Gateway, opts ...Option) {
 	options := new(Options)
 
 	for _, opt := range opts {
 		opt(options)
 	}
 
+	builder := gw.NewBuilder(api.RouterPrefix, "")
+
 	// 创建
 	builder.
 		Url(http.MethodPost, "/configuration/create").
@@ -166,4 +169,19 @@ func BuildGateway(builder *gateway.Builder, opts ...Option) {
 					return serviceUrl, nil
 				})), nil).
 		Build()
+
+	// 查询注册的服务
+	builder.
+		Url(http.MethodGet, "/configuration/registered/services").
+		Local(func(c *api.Context) {
+			serviceShortNames := make([]string, 0)
+			serviceBaseUrlMap.Range(func(key any, value any) bool {
+				serviceShortNames = append(serviceShortNames, key.(string))
+				return true
+			})
+
+			c.JSON(http.StatusOK, gin.H{
+				"services": serviceShortNames,
+			})
+		})
 }

+ 21 - 3
convenient/domain_gateway/sql_executor/sql_executor.go

@@ -5,6 +5,7 @@ import (
 	"git.sxidc.com/go-framework/baize/framework/gateway"
 	"git.sxidc.com/go-tools/utils/strutils"
 	"git.sxidc.com/service-supports/fserr"
+	"github.com/gin-gonic/gin"
 	"net/http"
 	"net/url"
 	"sync"
@@ -28,13 +29,15 @@ func RegisterService(serviceShortName string, baseUrl string) {
 	serviceBaseUrlMap.Store(serviceShortName, baseUrl)
 }
 
-func BuildGateway(builder *gateway.Builder, opts ...Option) {
+func BuildGateway(gw *gateway.Gateway, opts ...Option) {
 	options := new(Options)
 
 	for _, opt := range opts {
 		opt(options)
 	}
 
+	builder := gw.NewBuilder(api.RouterPrefix, "")
+
 	builder.
 		Url(http.MethodPost, "/sql/execute").
 		Post(gateway.NewPostRequest("",
@@ -122,14 +125,14 @@ func BuildGateway(builder *gateway.Builder, opts ...Option) {
 					var serviceUrl string
 
 					if strutils.IsStringEmpty(options.serviceApiVersion) {
-						innerServiceUrl, err := url.JoinPath(serviceBaseUrl.(string), serviceShortName, "/api", "/configuration/values")
+						innerServiceUrl, err := url.JoinPath(serviceBaseUrl.(string), serviceShortName, "/api", "/sql/execute/log")
 						if err != nil {
 							return "", err
 						}
 
 						serviceUrl = innerServiceUrl
 					} else {
-						innerServiceUrl, err := url.JoinPath(serviceBaseUrl.(string), serviceShortName, "/api", options.serviceApiVersion, "/configuration/values")
+						innerServiceUrl, err := url.JoinPath(serviceBaseUrl.(string), serviceShortName, "/api", options.serviceApiVersion, "/sql/execute/log")
 						if err != nil {
 							return "", err
 						}
@@ -143,4 +146,19 @@ func BuildGateway(builder *gateway.Builder, opts ...Option) {
 				gateway.FormQueryParamsWithTenantIDAndUserIDFunc("", "executorId")),
 		), nil).
 		Build()
+
+	// 查询注册的服务
+	builder.
+		Url(http.MethodGet, "/sql/execute/registered/services").
+		Local(func(c *api.Context) {
+			serviceShortNames := make([]string, 0)
+			serviceBaseUrlMap.Range(func(key any, value any) bool {
+				serviceShortNames = append(serviceShortNames, key.(string))
+				return true
+			})
+
+			c.JSON(http.StatusOK, gin.H{
+				"services": serviceShortNames,
+			})
+		})
 }

+ 40 - 8
framework/core/api/context.go

@@ -4,6 +4,7 @@ import (
 	"bytes"
 	"encoding/json"
 	"git.sxidc.com/go-framework/baize/framework/core/infrastructure/logger"
+	"git.sxidc.com/service-supports/fserr"
 	"github.com/gin-gonic/gin"
 	"github.com/pkg/errors"
 	"io"
@@ -82,10 +83,25 @@ func (c *Context) GetBytesBody() (*CacheBody, error) {
 		}, nil
 	}
 
-	return &CacheBody{
-		c:         c,
-		bytesBody: body.([]byte),
-	}, nil
+	switch b := body.(type) {
+	case []byte:
+		return &CacheBody{
+			c:         c,
+			bytesBody: b,
+		}, nil
+	case map[string]any:
+		bytesBody, err := json.Marshal(b)
+		if err != nil {
+			return nil, err
+		}
+
+		return &CacheBody{
+			c:         c,
+			bytesBody: bytesBody,
+		}, nil
+	default:
+		return nil, fserr.New("不支持的body类型")
+	}
 }
 
 type JsonBody struct {
@@ -144,10 +160,26 @@ func (c *Context) GetJsonBody() (*JsonBody, error) {
 		}, nil
 	}
 
-	return &JsonBody{
-		c:           c,
-		jsonBodyMap: body.(map[string]any),
-	}, nil
+	switch b := body.(type) {
+	case []byte:
+		jsonBodyMap := make(map[string]any)
+		err := json.Unmarshal(b, &jsonBodyMap)
+		if err != nil {
+			return nil, err
+		}
+
+		return &JsonBody{
+			c:           c,
+			jsonBodyMap: jsonBodyMap,
+		}, nil
+	case map[string]any:
+		return &JsonBody{
+			c:           c,
+			jsonBodyMap: body.(map[string]any),
+		}, nil
+	default:
+		return nil, fserr.New("不支持的body类型")
+	}
 }
 
 type QueryPrams struct {

+ 8 - 0
framework/gateway/builder.go

@@ -3,10 +3,13 @@ package gateway
 import (
 	"git.sxidc.com/go-framework/baize/framework/core/api"
 	"git.sxidc.com/go-tools/utils/http_client"
+	"github.com/gin-gonic/gin"
 	"github.com/pkg/errors"
 	"time"
 )
 
+type LocalServiceFunc func(c *gin.Context)
+
 type GlobalRequestResponseCallback func(c *api.Context, request BuilderRequest, historyRequests []BuilderRequest, resultMap map[string]any) error
 type RequestResponseCallback func(c *api.Context, response *http_client.Response, historyRequests []BuilderRequest, resultMap map[string]any) error
 
@@ -75,6 +78,11 @@ func (builder *Builder) ResponseErrorCallback(responseErrorCallback ResponseErro
 	return copyBuilder
 }
 
+func (builder *Builder) Local(handler api.Handler, middlewares ...api.Handler) {
+	copyBuilder := builder.copy()
+	copyBuilder.router.AddRoute(builder.params.httpMethod, builder.params.relativePath, append(middlewares, handler)...)
+}
+
 func (builder *Builder) Build(middlewares ...api.Handler) {
 	copyBuilder := builder.copy()
 	copyBuilder.router.AddRoute(builder.params.httpMethod, builder.params.relativePath, append(middlewares,

+ 1 - 1
framework/gateway/builder_request.go

@@ -23,7 +23,7 @@ func FormJsonBodyWithTenantIDAndUserIDFunc(tenantIDFieldName string, userIDField
 			return nil, err
 		}
 
-		return jsonBody, nil
+		return jsonBody.Map(), nil
 	}
 }