yjp 1 жил өмнө
parent
commit
e1c94ae2f8

+ 61 - 61
convenient/gwtools/crud.go

@@ -9,23 +9,23 @@ import (
 )
 
 func CRUD(builder *gateway.Builder, params *CRUDParams, opts ...any) {
-	createOptions := new(CreateOptions)
-	deleteOptions := new(DeleteOptions)
-	updateOptions := new(UpdateOptions)
-	queryOptions := new(QueryOptions)
-	getByIDOptions := new(GetByIDOptions)
+	createOptions := new(CRUDCreateOptions)
+	deleteOptions := new(CRUDDeleteOptions)
+	updateOptions := new(CRUDUpdateOptions)
+	queryOptions := new(CRUDQueryOptions)
+	getByIDOptions := new(CRUDGetByIDOptions)
 
 	for _, opt := range opts {
 		switch o := opt.(type) {
-		case CreateOption:
+		case CRUDCreateOption:
 			o(createOptions)
-		case DeleteOption:
+		case CRUDDeleteOption:
 			o(deleteOptions)
-		case UpdateOption:
+		case CRUDUpdateOption:
 			o(updateOptions)
-		case QueryOption:
+		case CRUDQueryOption:
 			o(queryOptions)
-		case GetByIDOption:
+		case CRUDGetByIDOption:
 			o(getByIDOptions)
 		default:
 			continue
@@ -49,11 +49,11 @@ type CRUDParams struct {
 	DomainCamelName string
 
 	// 可选配置项,通过WithXXX配置
-	createOptions  *CreateOptions
-	deleteOptions  *DeleteOptions
-	updateOptions  *UpdateOptions
-	queryOptions   *QueryOptions
-	getByIDOptions *GetByIDOptions
+	createOptions  *CRUDCreateOptions
+	deleteOptions  *CRUDDeleteOptions
+	updateOptions  *CRUDUpdateOptions
+	queryOptions   *CRUDQueryOptions
+	getByIDOptions *CRUDGetByIDOptions
 }
 
 func (params *CRUDParams) crud(builder *gateway.Builder) {
@@ -122,13 +122,13 @@ func (params *CRUDParams) crud(builder *gateway.Builder) {
 	}
 }
 
-type CreateOption func(options *CreateOptions)
-type DeleteOption func(options *DeleteOptions)
-type UpdateOption func(options *UpdateOptions)
-type QueryOption func(options *QueryOptions)
-type GetByIDOption func(options *GetByIDOptions)
+type CRUDCreateOption func(options *CRUDCreateOptions)
+type CRUDDeleteOption func(options *CRUDDeleteOptions)
+type CRUDUpdateOption func(options *CRUDUpdateOptions)
+type CRUDQueryOption func(options *CRUDQueryOptions)
+type CRUDGetByIDOption func(options *CRUDGetByIDOptions)
 
-type CreateOptions struct {
+type CRUDCreateOptions struct {
 	// 关闭创建
 	disable bool
 
@@ -145,7 +145,7 @@ type CreateOptions struct {
 	getUserIDFunc GetUserIDFunc
 }
 
-type DeleteOptions struct {
+type CRUDDeleteOptions struct {
 	// 关闭删除
 	disable bool
 
@@ -156,7 +156,7 @@ type DeleteOptions struct {
 	middlewares []api.Handler
 }
 
-type UpdateOptions struct {
+type CRUDUpdateOptions struct {
 	// 关闭更新
 	disable bool
 
@@ -170,7 +170,7 @@ type UpdateOptions struct {
 	getUserIDFunc GetUserIDFunc
 }
 
-type QueryOptions struct {
+type CRUDQueryOptions struct {
 	// 关闭查询
 	disable bool
 
@@ -184,7 +184,7 @@ type QueryOptions struct {
 	getTenantIDFunc GetTenantIDFunc
 }
 
-type GetByIDOptions struct {
+type CRUDGetByIDOptions struct {
 	// 关闭根据ID查询
 	disable bool
 
@@ -195,110 +195,110 @@ type GetByIDOptions struct {
 	middlewares []api.Handler
 }
 
-func WithCreateCallbacks(callbacks gateway.RequestCallbackFunc) CreateOption {
-	return func(options *CreateOptions) {
+func WithCRUDCreateCallbacks(callbacks gateway.RequestCallbackFunc) CRUDCreateOption {
+	return func(options *CRUDCreateOptions) {
 		options.callback = callbacks
 	}
 }
 
-func WithCreateMiddlewares(middlewares []api.Handler) CreateOption {
-	return func(options *CreateOptions) {
+func WithCRUDCreateMiddlewares(middlewares []api.Handler) CRUDCreateOption {
+	return func(options *CRUDCreateOptions) {
 		options.middlewares = middlewares
 	}
 }
 
-func WithCreateGetTenantIDFunc(getTenantIDFunc GetTenantIDFunc) CreateOption {
-	return func(options *CreateOptions) {
+func WithCRUDCreateGetTenantIDFunc(getTenantIDFunc GetTenantIDFunc) CRUDCreateOption {
+	return func(options *CRUDCreateOptions) {
 		options.getTenantIDFunc = getTenantIDFunc
 	}
 }
 
-func WithCreateGetUserIDFunc(getUserIDFunc GetUserIDFunc) CreateOption {
-	return func(options *CreateOptions) {
+func WithCRUDCreateGetUserIDFunc(getUserIDFunc GetUserIDFunc) CRUDCreateOption {
+	return func(options *CRUDCreateOptions) {
 		options.getUserIDFunc = getUserIDFunc
 	}
 }
 
-func WithDisableDelete() DeleteOption {
-	return func(options *DeleteOptions) {
+func WithCRUDDisableDelete() CRUDDeleteOption {
+	return func(options *CRUDDeleteOptions) {
 		options.disable = true
 	}
 }
 
-func WithDeleteCallbacks(callbacks gateway.RequestCallbackFunc) DeleteOption {
-	return func(options *DeleteOptions) {
+func WithCRUDDeleteCallbacks(callbacks gateway.RequestCallbackFunc) CRUDDeleteOption {
+	return func(options *CRUDDeleteOptions) {
 		options.callback = callbacks
 	}
 }
 
-func WithDeleteMiddlewares(middlewares []api.Handler) DeleteOption {
-	return func(options *DeleteOptions) {
+func WithCRUDDeleteMiddlewares(middlewares []api.Handler) CRUDDeleteOption {
+	return func(options *CRUDDeleteOptions) {
 		options.middlewares = middlewares
 	}
 }
 
-func WithDisableUpdate() UpdateOption {
-	return func(options *UpdateOptions) {
+func WithCRUDDisableUpdate() CRUDUpdateOption {
+	return func(options *CRUDUpdateOptions) {
 		options.disable = true
 	}
 }
 
-func WithUpdateCallbacks(callbacks gateway.RequestCallbackFunc) UpdateOption {
-	return func(options *UpdateOptions) {
+func WithCRUDUpdateCallbacks(callbacks gateway.RequestCallbackFunc) CRUDUpdateOption {
+	return func(options *CRUDUpdateOptions) {
 		options.callback = callbacks
 	}
 }
 
-func WithUpdateMiddlewares(middlewares []api.Handler) UpdateOption {
-	return func(options *UpdateOptions) {
+func WithCRUDUpdateMiddlewares(middlewares []api.Handler) CRUDUpdateOption {
+	return func(options *CRUDUpdateOptions) {
 		options.middlewares = middlewares
 	}
 }
 
-func WithUpdateGetUserIDFunc(getUserIDFunc GetUserIDFunc) UpdateOption {
-	return func(options *UpdateOptions) {
+func WithCRUDUpdateGetUserIDFunc(getUserIDFunc GetUserIDFunc) CRUDUpdateOption {
+	return func(options *CRUDUpdateOptions) {
 		options.getUserIDFunc = getUserIDFunc
 	}
 }
 
-func WithDisableQuery() QueryOption {
-	return func(options *QueryOptions) {
+func WithCRUDDisableQuery() CRUDQueryOption {
+	return func(options *CRUDQueryOptions) {
 		options.disable = true
 	}
 }
 
-func WithQueryCallbacks(callbacks gateway.RequestCallbackFunc) QueryOption {
-	return func(options *QueryOptions) {
+func WithCRUDQueryCallbacks(callbacks gateway.RequestCallbackFunc) CRUDQueryOption {
+	return func(options *CRUDQueryOptions) {
 		options.callback = callbacks
 	}
 }
 
-func WithQueryMiddlewares(middlewares []api.Handler) QueryOption {
-	return func(options *QueryOptions) {
+func WithCRUDQueryMiddlewares(middlewares []api.Handler) CRUDQueryOption {
+	return func(options *CRUDQueryOptions) {
 		options.middlewares = middlewares
 	}
 }
 
-func WithQueryGetTenantIDFunc(getTenantIDFunc GetTenantIDFunc) QueryOption {
-	return func(options *QueryOptions) {
+func WithCRUDQueryGetTenantIDFunc(getTenantIDFunc GetTenantIDFunc) CRUDQueryOption {
+	return func(options *CRUDQueryOptions) {
 		options.getTenantIDFunc = getTenantIDFunc
 	}
 }
 
-func WithDisableGetByID() GetByIDOption {
-	return func(options *GetByIDOptions) {
+func WithCRUDDisableGetByID() CRUDGetByIDOption {
+	return func(options *CRUDGetByIDOptions) {
 		options.disable = true
 	}
 }
 
-func WithGetByIDCallbacks(callbacks gateway.RequestCallbackFunc) GetByIDOption {
-	return func(options *GetByIDOptions) {
+func WithCRUDGetByIDCallbacks(callbacks gateway.RequestCallbackFunc) CRUDGetByIDOption {
+	return func(options *CRUDGetByIDOptions) {
 		options.callback = callbacks
 	}
 }
 
-func WithGetByIDMiddlewares(middlewares []api.Handler) GetByIDOption {
-	return func(options *GetByIDOptions) {
+func WithCRUDGetByIDMiddlewares(middlewares []api.Handler) CRUDGetByIDOption {
+	return func(options *CRUDGetByIDOptions) {
 		options.middlewares = middlewares
 	}
 }

+ 143 - 0
convenient/gwtools/many2many.go

@@ -0,0 +1,143 @@
+package gwtools
+
+import (
+	"git.sxidc.com/go-framework/baize/framework/gateway"
+	"git.sxidc.com/go-tools/utils/template"
+	"github.com/iancoleman/strcase"
+	"net/http"
+)
+
+func Many2Many(builder *gateway.Builder, params *Many2ManyParams, opts ...Many2ManyOption) {
+	options := new(Many2ManyOptions)
+
+	for _, opt := range opts {
+		opt(options)
+	}
+
+	params.options = options
+
+	params.many2many(builder)
+}
+
+type Many2ManyParams struct {
+	// 除去后缀的服务URL,如http://localhost:8080/example/api/v1
+	ServiceVersionedUrl string
+
+	// 左领域名称
+	LeftDomainCamelName string
+
+	// 右领域名称
+	RightDomainCamelName string
+
+	// 可选配置项,通过WithXXX配置
+	options *Many2ManyOptions
+}
+
+func (params *Many2ManyParams) many2many(builder *gateway.Builder) {
+	options := params.options
+
+	leftDomainPath := "/" + strcase.ToLowerCamel(template.Id(params.LeftDomainCamelName))
+	rightDomainPath := "/" + strcase.ToLowerCamel(template.Id(params.RightDomainCamelName))
+
+	if !options.disableLeft {
+		if !options.disableLeftUpdate {
+			// 左到右更新
+			builder.
+				Url(http.MethodPost, leftDomainPath+rightDomainPath+"/update").
+				Post(&gateway.PostRequest{
+					Url: params.ServiceVersionedUrl + leftDomainPath + rightDomainPath + "/update",
+				}, nil).
+				Build()
+		}
+
+		if !options.disableLeftQuery {
+			// 左到右查询
+			builder.
+				Url(http.MethodGet, leftDomainPath+rightDomainPath+"/query").
+				Get(&gateway.GetRequest{
+					Url: params.ServiceVersionedUrl + leftDomainPath + rightDomainPath + "/query",
+				}, nil).
+				Build()
+		}
+	}
+
+	if !options.disableRight {
+		if !options.disableRightUpdate {
+			// 右到左更新
+			builder.
+				Url(http.MethodPost, rightDomainPath+leftDomainPath+"/update").
+				Post(&gateway.PostRequest{
+					Url: params.ServiceVersionedUrl + rightDomainPath + leftDomainPath + "/update",
+				}, nil).
+				Build()
+		}
+
+		if !options.disableRightQuery {
+			// 右到左查询
+			builder.
+				Url(http.MethodGet, rightDomainPath+leftDomainPath+"/query").
+				Get(&gateway.GetRequest{
+					Url: params.ServiceVersionedUrl + rightDomainPath + leftDomainPath + "/query",
+				}, nil).
+				Build()
+		}
+	}
+}
+
+type Many2ManyOption func(options *Many2ManyOptions)
+
+type Many2ManyOptions struct {
+	// 关闭左侧到右侧关联
+	disableLeft bool
+
+	// 关闭右侧到左侧关联
+	disableRight bool
+
+	// 关闭左侧更新
+	disableLeftUpdate bool
+
+	// 关闭左侧查询
+	disableLeftQuery bool
+
+	// 关闭右侧更新
+	disableRightUpdate bool
+
+	// 关闭右侧查询
+	disableRightQuery bool
+}
+
+func WithMany2ManyDisableLeft() Many2ManyOption {
+	return func(options *Many2ManyOptions) {
+		options.disableLeft = true
+	}
+}
+
+func WithMany2ManyDisableRight() Many2ManyOption {
+	return func(options *Many2ManyOptions) {
+		options.disableRight = true
+	}
+}
+
+func WithMany2ManyDisableLeftUpdate() Many2ManyOption {
+	return func(options *Many2ManyOptions) {
+		options.disableLeftUpdate = true
+	}
+}
+
+func WithMany2ManyDisableLeftQuery() Many2ManyOption {
+	return func(options *Many2ManyOptions) {
+		options.disableLeftQuery = true
+	}
+}
+
+func WithMany2ManyDisableRightUpdate() Many2ManyOption {
+	return func(options *Many2ManyOptions) {
+		options.disableRightUpdate = true
+	}
+}
+
+func WithMany2ManyDisableRightQuery() Many2ManyOption {
+	return func(options *Many2ManyOptions) {
+		options.disableRightQuery = true
+	}
+}

+ 25 - 25
convenient/gwtools/one2one.go

@@ -7,8 +7,8 @@ import (
 	"net/http"
 )
 
-func One2One(builder *gateway.Builder, params *One2OneParams, opts ...Option) {
-	options := new(Options)
+func One2One(builder *gateway.Builder, params *One2OneParams, opts ...One2OneOption) {
+	options := new(One2OneOptions)
 
 	for _, opt := range opts {
 		opt(options)
@@ -30,7 +30,7 @@ type One2OneParams struct {
 	RightDomainCamelName string
 
 	// 可选配置项,通过WithXXX配置
-	options *Options
+	options *One2OneOptions
 }
 
 func (params *One2OneParams) one2one(builder *gateway.Builder) {
@@ -108,9 +108,9 @@ func (params *One2OneParams) one2one(builder *gateway.Builder) {
 	}
 }
 
-type Option func(options *Options)
+type One2OneOption func(options *One2OneOptions)
 
-type Options struct {
+type One2OneOptions struct {
 	// 关闭左侧到右侧关联
 	disableLeft bool
 
@@ -142,62 +142,62 @@ type Options struct {
 	rightWithLeftQueryGetTenantIDFunc GetTenantIDFunc
 }
 
-func WithDisableLeft() Option {
-	return func(options *Options) {
+func WithOne2OneDisableLeft() One2OneOption {
+	return func(options *One2OneOptions) {
 		options.disableLeft = true
 	}
 }
 
-func WithDisableRight() Option {
-	return func(options *Options) {
+func WithOne2OneDisableRight() One2OneOption {
+	return func(options *One2OneOptions) {
 		options.disableRight = true
 	}
 }
 
-func WithDisableLeftUpdate() Option {
-	return func(options *Options) {
+func WithOne2OneDisableLeftUpdate() One2OneOption {
+	return func(options *One2OneOptions) {
 		options.disableLeftUpdate = true
 	}
 }
 
-func WithDisableLeftQuery() Option {
-	return func(options *Options) {
+func WithOne2OneDisableLeftQuery() One2OneOption {
+	return func(options *One2OneOptions) {
 		options.disableLeftQuery = true
 	}
 }
 
-func WithDisableRightUpdate() Option {
-	return func(options *Options) {
+func WithOne2OneDisableRightUpdate() One2OneOption {
+	return func(options *One2OneOptions) {
 		options.disableRightUpdate = true
 	}
 }
 
-func WithDisableRightQuery() Option {
-	return func(options *Options) {
+func WithOne2OneDisableRightQuery() One2OneOption {
+	return func(options *One2OneOptions) {
 		options.disableRightQuery = true
 	}
 }
 
-func WithDisableLeftWithRightQuery() Option {
-	return func(options *Options) {
+func WithOne2OneDisableLeftWithRightQuery() One2OneOption {
+	return func(options *One2OneOptions) {
 		options.disableLeftWithRightQuery = true
 	}
 }
 
-func WithDisableRightWithLeftQuery() Option {
-	return func(options *Options) {
+func WithOne2OneDisableRightWithLeftQuery() One2OneOption {
+	return func(options *One2OneOptions) {
 		options.disableRightWithLeftQuery = true
 	}
 }
 
-func WithLeftWithRightQueryGetTenantIDFunc(getTenantIDFunc GetTenantIDFunc) Option {
-	return func(options *Options) {
+func WithOne2OneLeftWithRightQueryGetTenantIDFunc(getTenantIDFunc GetTenantIDFunc) One2OneOption {
+	return func(options *One2OneOptions) {
 		options.leftWithRightQueryGetTenantIDFunc = getTenantIDFunc
 	}
 }
 
-func WithRightWithLeftQueryGetTenantIDFunc(getTenantIDFunc GetTenantIDFunc) Option {
-	return func(options *Options) {
+func WithOne2OneRightWithLeftQueryGetTenantIDFunc(getTenantIDFunc GetTenantIDFunc) One2OneOption {
+	return func(options *One2OneOptions) {
 		options.rightWithLeftQueryGetTenantIDFunc = getTenantIDFunc
 	}
 }