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

+ 167 - 30
convenient/gwtools/entity_crud.go

@@ -75,63 +75,110 @@ func (params *EntityCRUDParams) crud(builder *gateway.Builder) {
 	if !createOptions.disable {
 		createMiddlewares := append(globalOptions.middlewares, createOptions.middlewares...)
 
-		builder.
-			Url(http.MethodPost, domainPath+"/create").
-			Post(gateway.NewPostRequest(params.ServiceVersionedUrl+domainPath+"/create",
-				gateway.PostRequestWithBodyForm(
-					gateway.FormJsonBodyWithTenantIDAndUserIDFunc("tenantId", "createUserId"))),
-				createOptions.requestResponseCallback).
-			Build(createMiddlewares...)
+		copyBuilder := builder.Url(http.MethodPost, domainPath+"/create")
+
+		if createOptions.beforeBuilderCallback != nil {
+			copyBuilder = createOptions.beforeBuilderCallback(copyBuilder)
+		}
+
+		copyBuilder = copyBuilder.Post(gateway.NewPostRequest(params.ServiceVersionedUrl+domainPath+"/create",
+			gateway.PostRequestWithBodyForm(
+				gateway.FormJsonBodyWithTenantIDAndUserIDFunc("tenantId", "createUserId"))),
+			createOptions.requestResponseCallback)
+
+		if createOptions.afterBuilderCallback != nil {
+			copyBuilder = createOptions.afterBuilderCallback(copyBuilder)
+		}
+
+		copyBuilder.Build(createMiddlewares...)
 	}
 
 	// 删除
 	if !deleteOptions.disable {
 		deleteMiddlewares := append(globalOptions.middlewares, deleteOptions.middlewares...)
 
-		builder.
-			Url(http.MethodDelete, domainPath+"/delete").
-			Delete(gateway.NewDeleteRequest(params.ServiceVersionedUrl+domainPath+"/delete"),
-				deleteOptions.requestResponseCallback).
-			Build(deleteMiddlewares...)
+		copyBuilder := builder.Url(http.MethodDelete, domainPath+"/delete")
+
+		if deleteOptions.beforeBuilderCallback != nil {
+			copyBuilder = deleteOptions.beforeBuilderCallback(copyBuilder)
+		}
+
+		copyBuilder = copyBuilder.Delete(gateway.NewDeleteRequest(params.ServiceVersionedUrl+domainPath+"/delete"),
+			deleteOptions.requestResponseCallback)
+
+		if deleteOptions.afterBuilderCallback != nil {
+			copyBuilder = deleteOptions.afterBuilderCallback(copyBuilder)
+		}
+
+		copyBuilder.Build(deleteMiddlewares...)
 	}
 
 	// 修改
 	if !updateOptions.disable {
 		updateMiddlewares := append(globalOptions.middlewares, updateOptions.middlewares...)
 
-		builder.
-			Url(http.MethodPut, domainPath+"/update").
-			Put(gateway.NewPutRequest(params.ServiceVersionedUrl+domainPath+"/update",
-				gateway.PutRequestWithBodyForm(
-					gateway.FormJsonBodyWithTenantIDAndUserIDFunc("", "updateUserId"))),
-				updateOptions.requestResponseCallback).
-			Build(updateMiddlewares...)
+		copyBuilder := builder.Url(http.MethodPut, domainPath+"/update")
+
+		if updateOptions.beforeBuilderCallback != nil {
+			copyBuilder = updateOptions.beforeBuilderCallback(copyBuilder)
+		}
+
+		copyBuilder = copyBuilder.Put(gateway.NewPutRequest(params.ServiceVersionedUrl+domainPath+"/update",
+			gateway.PutRequestWithBodyForm(
+				gateway.FormJsonBodyWithTenantIDAndUserIDFunc("", "updateUserId"))),
+			updateOptions.requestResponseCallback)
+
+		if updateOptions.afterBuilderCallback != nil {
+			copyBuilder = updateOptions.afterBuilderCallback(copyBuilder)
+		}
+
+		copyBuilder.Build(updateMiddlewares...)
 	}
 
 	// 查询
 	if !queryOptions.disable {
 		queryMiddlewares := append(globalOptions.middlewares, queryOptions.middlewares...)
 
-		builder.
-			Url(http.MethodGet, domainPath+"/query").
-			Get(gateway.NewGetRequest(params.ServiceVersionedUrl+domainPath+"/query",
-				gateway.GetRequestWithQueryParamsForm(gateway.FormQueryParamsWithTenantIDAndUserIDFunc("tenantId", ""))),
-				queryOptions.requestResponseCallback).
-			Build(queryMiddlewares...)
+		copyBuilder := builder.Url(http.MethodGet, domainPath+"/query")
+
+		if queryOptions.beforeBuilderCallback != nil {
+			copyBuilder = queryOptions.beforeBuilderCallback(copyBuilder)
+		}
+
+		copyBuilder = copyBuilder.Get(gateway.NewGetRequest(params.ServiceVersionedUrl+domainPath+"/query",
+			gateway.GetRequestWithQueryParamsForm(gateway.FormQueryParamsWithTenantIDAndUserIDFunc("tenantId", ""))),
+			queryOptions.requestResponseCallback)
+
+		if queryOptions.afterBuilderCallback != nil {
+			copyBuilder = queryOptions.afterBuilderCallback(copyBuilder)
+		}
+
+		copyBuilder.Build(queryMiddlewares...)
 	}
 
 	// 通过ID获取
 	if !getByIDOptions.disable {
 		getByIDMiddlewares := append(globalOptions.middlewares, getByIDOptions.middlewares...)
 
-		builder.
-			Url(http.MethodGet, domainPath+"/get").
-			Get(gateway.NewGetRequest(params.ServiceVersionedUrl+domainPath+"/get"),
-				getByIDOptions.requestResponseCallback).
-			Build(getByIDMiddlewares...)
+		copyBuilder := builder.Url(http.MethodGet, domainPath+"/get")
+
+		if getByIDOptions.beforeBuilderCallback != nil {
+			copyBuilder = getByIDOptions.beforeBuilderCallback(copyBuilder)
+		}
+
+		copyBuilder = copyBuilder.Get(gateway.NewGetRequest(params.ServiceVersionedUrl+domainPath+"/get"),
+			getByIDOptions.requestResponseCallback)
+
+		if getByIDOptions.afterBuilderCallback != nil {
+			copyBuilder = getByIDOptions.afterBuilderCallback(copyBuilder)
+		}
+
+		copyBuilder.Build(getByIDMiddlewares...)
 	}
 }
 
+type EntityCRUDBuilderCallback func(builder *gateway.Builder) *gateway.Builder
+
 type EntityCRUDGlobalOption func(options *EntityCRUDGlobalOptions)
 type EntityCRUDCreateOption func(options *EntityCRUDCreateOptions)
 type EntityCRUDDeleteOption func(options *EntityCRUDDeleteOptions)
@@ -147,9 +194,15 @@ type EntityCRUDCreateOptions struct {
 	// 关闭创建
 	disable bool
 
+	// 创建请求前回调
+	beforeBuilderCallback EntityCRUDBuilderCallback
+
 	// 创建请求响应回调
 	requestResponseCallback gateway.RequestResponseCallback
 
+	// 创建请求后回调
+	afterBuilderCallback EntityCRUDBuilderCallback
+
 	// 创建中间件
 	middlewares []api.Handler
 }
@@ -158,9 +211,15 @@ type EntityCRUDDeleteOptions struct {
 	// 关闭删除
 	disable bool
 
+	// 删除请求前回调
+	beforeBuilderCallback EntityCRUDBuilderCallback
+
 	// 删除请求响应回调
 	requestResponseCallback gateway.RequestResponseCallback
 
+	// 删除请求后回调
+	afterBuilderCallback EntityCRUDBuilderCallback
+
 	// 删除中间件
 	middlewares []api.Handler
 }
@@ -169,9 +228,15 @@ type EntityCRUDUpdateOptions struct {
 	// 关闭更新
 	disable bool
 
+	// 更新请求前回调
+	beforeBuilderCallback EntityCRUDBuilderCallback
+
 	// 更新请求响应回调
 	requestResponseCallback gateway.RequestResponseCallback
 
+	// 更新请求后回调
+	afterBuilderCallback EntityCRUDBuilderCallback
+
 	// 更新中间件
 	middlewares []api.Handler
 }
@@ -180,9 +245,15 @@ type EntityCRUDQueryOptions struct {
 	// 关闭查询
 	disable bool
 
+	// 查询请求前回调
+	beforeBuilderCallback EntityCRUDBuilderCallback
+
 	// 查询请求响应回调
 	requestResponseCallback gateway.RequestResponseCallback
 
+	// 查询请求后回调
+	afterBuilderCallback EntityCRUDBuilderCallback
+
 	// 查询中间件
 	middlewares []api.Handler
 }
@@ -191,9 +262,15 @@ type EntityCRUDGetByIDOptions struct {
 	// 关闭根据ID查询
 	disable bool
 
+	// 根据ID请求前回调
+	beforeBuilderCallback EntityCRUDBuilderCallback
+
 	// 根据ID请求响应回调
 	requestResponseCallback gateway.RequestResponseCallback
 
+	// 根据ID请求后回调
+	afterBuilderCallback EntityCRUDBuilderCallback
+
 	// 根据ID查询中间件
 	middlewares []api.Handler
 }
@@ -204,12 +281,24 @@ func WithEntityCRUDGlobalMiddlewares(middlewares ...api.Handler) EntityCRUDGloba
 	}
 }
 
+func WithEntityCRUDBeforeCreateBuilderCallback(callbacks EntityCRUDBuilderCallback) EntityCRUDCreateOption {
+	return func(options *EntityCRUDCreateOptions) {
+		options.beforeBuilderCallback = callbacks
+	}
+}
+
 func WithEntityCRUDCreateCallbacks(callbacks gateway.RequestResponseCallback) EntityCRUDCreateOption {
 	return func(options *EntityCRUDCreateOptions) {
 		options.requestResponseCallback = callbacks
 	}
 }
 
+func WithEntityCRUDAfterCreateBuilderCallback(callbacks EntityCRUDBuilderCallback) EntityCRUDCreateOption {
+	return func(options *EntityCRUDCreateOptions) {
+		options.afterBuilderCallback = callbacks
+	}
+}
+
 func WithEntityCRUDCreateMiddlewares(middlewares []api.Handler) EntityCRUDCreateOption {
 	return func(options *EntityCRUDCreateOptions) {
 		options.middlewares = middlewares
@@ -222,12 +311,24 @@ func WithEntityCRUDDisableDelete() EntityCRUDDeleteOption {
 	}
 }
 
+func WithEntityCRUDBeforeDeleteBuilderCallback(callbacks EntityCRUDBuilderCallback) EntityCRUDDeleteOption {
+	return func(options *EntityCRUDDeleteOptions) {
+		options.beforeBuilderCallback = callbacks
+	}
+}
+
 func WithEntityCRUDDeleteCallbacks(callbacks gateway.RequestResponseCallback) EntityCRUDDeleteOption {
 	return func(options *EntityCRUDDeleteOptions) {
 		options.requestResponseCallback = callbacks
 	}
 }
 
+func WithEntityCRUDAfterDeleteBuilderCallback(callbacks EntityCRUDBuilderCallback) EntityCRUDDeleteOption {
+	return func(options *EntityCRUDDeleteOptions) {
+		options.afterBuilderCallback = callbacks
+	}
+}
+
 func WithEntityCRUDDeleteMiddlewares(middlewares []api.Handler) EntityCRUDDeleteOption {
 	return func(options *EntityCRUDDeleteOptions) {
 		options.middlewares = middlewares
@@ -240,12 +341,24 @@ func WithEntityCRUDDisableUpdate() EntityCRUDUpdateOption {
 	}
 }
 
+func WithEntityCRUDBeforeUpdateBuilderCallback(callbacks EntityCRUDBuilderCallback) EntityCRUDUpdateOption {
+	return func(options *EntityCRUDUpdateOptions) {
+		options.beforeBuilderCallback = callbacks
+	}
+}
+
 func WithEntityCRUDUpdateCallbacks(callbacks gateway.RequestResponseCallback) EntityCRUDUpdateOption {
 	return func(options *EntityCRUDUpdateOptions) {
 		options.requestResponseCallback = callbacks
 	}
 }
 
+func WithEntityCRUDAfterUpdateBuilderCallback(callbacks EntityCRUDBuilderCallback) EntityCRUDUpdateOption {
+	return func(options *EntityCRUDUpdateOptions) {
+		options.afterBuilderCallback = callbacks
+	}
+}
+
 func WithEntityCRUDUpdateMiddlewares(middlewares []api.Handler) EntityCRUDUpdateOption {
 	return func(options *EntityCRUDUpdateOptions) {
 		options.middlewares = middlewares
@@ -258,12 +371,24 @@ func WithEntityCRUDDisableQuery() EntityCRUDQueryOption {
 	}
 }
 
+func WithEntityCRUDBeforeQueryBuilderCallback(callbacks EntityCRUDBuilderCallback) EntityCRUDQueryOption {
+	return func(options *EntityCRUDQueryOptions) {
+		options.beforeBuilderCallback = callbacks
+	}
+}
+
 func WithEntityCRUDQueryCallbacks(callbacks gateway.RequestResponseCallback) EntityCRUDQueryOption {
 	return func(options *EntityCRUDQueryOptions) {
 		options.requestResponseCallback = callbacks
 	}
 }
 
+func WithEntityCRUDAfterQueryBuilderCallback(callbacks EntityCRUDBuilderCallback) EntityCRUDQueryOption {
+	return func(options *EntityCRUDQueryOptions) {
+		options.afterBuilderCallback = callbacks
+	}
+}
+
 func WithEntityCRUDQueryMiddlewares(middlewares []api.Handler) EntityCRUDQueryOption {
 	return func(options *EntityCRUDQueryOptions) {
 		options.middlewares = middlewares
@@ -276,12 +401,24 @@ func WithEntityCRUDDisableGetByID() EntityCRUDGetByIDOption {
 	}
 }
 
+func WithEntityCRUDBeforeGetByIDBuilderCallback(callbacks EntityCRUDBuilderCallback) EntityCRUDGetByIDOption {
+	return func(options *EntityCRUDGetByIDOptions) {
+		options.beforeBuilderCallback = callbacks
+	}
+}
+
 func WithEntityCRUDGetByIDCallbacks(callbacks gateway.RequestResponseCallback) EntityCRUDGetByIDOption {
 	return func(options *EntityCRUDGetByIDOptions) {
 		options.requestResponseCallback = callbacks
 	}
 }
 
+func WithEntityCRUDAfterGetByIDBuilderCallback(callbacks EntityCRUDBuilderCallback) EntityCRUDGetByIDOption {
+	return func(options *EntityCRUDGetByIDOptions) {
+		options.afterBuilderCallback = callbacks
+	}
+}
+
 func WithEntityCRUDGetByIDMiddlewares(middlewares []api.Handler) EntityCRUDGetByIDOption {
 	return func(options *EntityCRUDGetByIDOptions) {
 		options.middlewares = middlewares

+ 102 - 19
convenient/gwtools/value_object_crud.go

@@ -63,40 +63,69 @@ func (params *ValueObjectCRUDParams) crud(builder *gateway.Builder) {
 	if !createOptions.disable {
 		createMiddlewares := append(globalOptions.middlewares, createOptions.middlewares...)
 
-		builder.
-			Url(http.MethodPost, domainPath+"/create").
-			Post(gateway.NewPostRequest(params.ServiceVersionedUrl+domainPath+"/create",
-				gateway.PostRequestWithBodyForm(
-					gateway.FormJsonBodyWithTenantIDAndUserIDFunc("tenantId", "createUserId"))),
-				createOptions.requestResponseCallback).
-			Build(createMiddlewares...)
+		copyBuilder := builder.Url(http.MethodPost, domainPath+"/create")
+
+		if createOptions.beforeBuilderCallback != nil {
+			copyBuilder = createOptions.beforeBuilderCallback(copyBuilder)
+		}
+
+		copyBuilder = copyBuilder.Post(gateway.NewPostRequest(params.ServiceVersionedUrl+domainPath+"/create",
+			gateway.PostRequestWithBodyForm(
+				gateway.FormJsonBodyWithTenantIDAndUserIDFunc("tenantId", "createUserId"))),
+			createOptions.requestResponseCallback)
+
+		if createOptions.afterBuilderCallback != nil {
+			copyBuilder = createOptions.afterBuilderCallback(copyBuilder)
+		}
+
+		copyBuilder.Build(createMiddlewares...)
 	}
 
 	// 删除
 	if !deleteOptions.disable {
 		deleteMiddlewares := append(globalOptions.middlewares, deleteOptions.middlewares...)
 
-		builder.
-			Url(http.MethodPost, domainPath+"/delete").
-			Post(gateway.NewPostRequest(params.ServiceVersionedUrl+domainPath+"/delete"),
-				deleteOptions.requestResponseCallback).
-			Build(deleteMiddlewares...)
+		copyBuilder := builder.Url(http.MethodPost, domainPath+"/delete")
+
+		if deleteOptions.beforeBuilderCallback != nil {
+			copyBuilder = deleteOptions.beforeBuilderCallback(copyBuilder)
+		}
+
+		copyBuilder = copyBuilder.Post(gateway.NewPostRequest(params.ServiceVersionedUrl+domainPath+"/delete"),
+			deleteOptions.requestResponseCallback)
+
+		if deleteOptions.afterBuilderCallback != nil {
+			copyBuilder = deleteOptions.afterBuilderCallback(copyBuilder)
+		}
+
+		copyBuilder.Build(deleteMiddlewares...)
 	}
 
 	// 查询
 	if !queryOptions.disable {
 		queryMiddlewares := append(globalOptions.middlewares, queryOptions.middlewares...)
 
-		builder.
-			Url(http.MethodGet, domainPath+"/query").
-			Get(gateway.NewGetRequest(params.ServiceVersionedUrl+domainPath+"/query",
-				gateway.GetRequestWithQueryParamsForm(
-					gateway.FormQueryParamsWithTenantIDAndUserIDFunc("tenantId", ""))),
-				queryOptions.requestResponseCallback).
-			Build(queryMiddlewares...)
+		copyBuilder := builder.Url(http.MethodGet, domainPath+"/query")
+
+		if queryOptions.beforeBuilderCallback != nil {
+			copyBuilder = queryOptions.beforeBuilderCallback(copyBuilder)
+		}
+
+		copyBuilder = copyBuilder.Get(gateway.NewGetRequest(params.ServiceVersionedUrl+domainPath+"/query",
+			gateway.GetRequestWithQueryParamsForm(
+				gateway.FormQueryParamsWithTenantIDAndUserIDFunc("tenantId", ""))),
+			queryOptions.requestResponseCallback)
+
+		if queryOptions.afterBuilderCallback != nil {
+			copyBuilder = queryOptions.afterBuilderCallback(copyBuilder)
+		}
+
+		copyBuilder.Build(queryMiddlewares...)
 	}
 }
 
+type ValueObjectCRUDBuilderCallback func(builder *gateway.Builder) *gateway.Builder
+
 type ValueObjectCRUDGlobalOption func(options *ValueObjectCRUDGlobalOptions)
 type ValueObjectCRUDCreateOption func(options *ValueObjectCRUDCreateOptions)
 type ValueObjectCRUDDeleteOption func(options *ValueObjectCRUDDeleteOptions)
@@ -110,9 +139,15 @@ type ValueObjectCRUDCreateOptions struct {
 	// 关闭创建
 	disable bool
 
+	// 创建请求前回调
+	beforeBuilderCallback ValueObjectCRUDBuilderCallback
+
 	// 创建请求响应回调
 	requestResponseCallback gateway.RequestResponseCallback
 
+	// 创建请求后回调
+	afterBuilderCallback ValueObjectCRUDBuilderCallback
+
 	// 创建中间件
 	middlewares []api.Handler
 }
@@ -121,9 +156,15 @@ type ValueObjectCRUDDeleteOptions struct {
 	// 关闭删除
 	disable bool
 
+	// 删除请求前回调
+	beforeBuilderCallback ValueObjectCRUDBuilderCallback
+
 	// 删除请求响应回调
 	requestResponseCallback gateway.RequestResponseCallback
 
+	// 删除请求后回调
+	afterBuilderCallback ValueObjectCRUDBuilderCallback
+
 	// 删除中间件
 	middlewares []api.Handler
 }
@@ -132,9 +173,15 @@ type ValueObjectCRUDQueryOptions struct {
 	// 关闭查询
 	disable bool
 
+	// 查询请求前回调
+	beforeBuilderCallback ValueObjectCRUDBuilderCallback
+
 	// 查询请求响应回调
 	requestResponseCallback gateway.RequestResponseCallback
 
+	// 查询请求后回调
+	afterBuilderCallback ValueObjectCRUDBuilderCallback
+
 	// 查询中间件
 	middlewares []api.Handler
 }
@@ -145,12 +192,24 @@ func WithValueObjectCRUDGlobalMiddlewares(middlewares ...api.Handler) ValueObjec
 	}
 }
 
+func WithValueObjectCRUDBeforeCreateBuilderCallback(callbacks ValueObjectCRUDBuilderCallback) ValueObjectCRUDCreateOption {
+	return func(options *ValueObjectCRUDCreateOptions) {
+		options.beforeBuilderCallback = callbacks
+	}
+}
+
 func WithValueObjectCRUDCreateCallbacks(callbacks gateway.RequestResponseCallback) ValueObjectCRUDCreateOption {
 	return func(options *ValueObjectCRUDCreateOptions) {
 		options.requestResponseCallback = callbacks
 	}
 }
 
+func WithValueObjectCRUDAfterCreateBuilderCallback(callbacks ValueObjectCRUDBuilderCallback) ValueObjectCRUDCreateOption {
+	return func(options *ValueObjectCRUDCreateOptions) {
+		options.afterBuilderCallback = callbacks
+	}
+}
+
 func WithValueObjectCRUDCreateMiddlewares(middlewares []api.Handler) ValueObjectCRUDCreateOption {
 	return func(options *ValueObjectCRUDCreateOptions) {
 		options.middlewares = middlewares
@@ -163,12 +222,24 @@ func WithValueObjectCRUDDisableDelete() ValueObjectCRUDDeleteOption {
 	}
 }
 
+func WithValueObjectCRUDBeforeDeleteBuilderCallback(callbacks ValueObjectCRUDBuilderCallback) ValueObjectCRUDDeleteOption {
+	return func(options *ValueObjectCRUDDeleteOptions) {
+		options.beforeBuilderCallback = callbacks
+	}
+}
+
 func WithValueObjectCRUDDeleteCallbacks(callbacks gateway.RequestResponseCallback) ValueObjectCRUDDeleteOption {
 	return func(options *ValueObjectCRUDDeleteOptions) {
 		options.requestResponseCallback = callbacks
 	}
 }
 
+func WithValueObjectCRUDAfterDeleteBuilderCallback(callbacks ValueObjectCRUDBuilderCallback) ValueObjectCRUDDeleteOption {
+	return func(options *ValueObjectCRUDDeleteOptions) {
+		options.afterBuilderCallback = callbacks
+	}
+}
+
 func WithValueObjectCRUDDeleteMiddlewares(middlewares []api.Handler) ValueObjectCRUDDeleteOption {
 	return func(options *ValueObjectCRUDDeleteOptions) {
 		options.middlewares = middlewares
@@ -181,12 +252,24 @@ func WithValueObjectCRUDDisableQuery() ValueObjectCRUDQueryOption {
 	}
 }
 
+func WithValueObjectCRUDBeforeQueryBuilderCallback(callbacks ValueObjectCRUDBuilderCallback) ValueObjectCRUDQueryOption {
+	return func(options *ValueObjectCRUDQueryOptions) {
+		options.beforeBuilderCallback = callbacks
+	}
+}
+
 func WithValueObjectCRUDQueryCallbacks(callbacks gateway.RequestResponseCallback) ValueObjectCRUDQueryOption {
 	return func(options *ValueObjectCRUDQueryOptions) {
 		options.requestResponseCallback = callbacks
 	}
 }
 
+func WithValueObjectCRUDAfterQueryBuilderCallback(callbacks ValueObjectCRUDBuilderCallback) ValueObjectCRUDQueryOption {
+	return func(options *ValueObjectCRUDQueryOptions) {
+		options.afterBuilderCallback = callbacks
+	}
+}
+
 func WithValueObjectCRUDQueryMiddlewares(middlewares []api.Handler) ValueObjectCRUDQueryOption {
 	return func(options *ValueObjectCRUDQueryOptions) {
 		options.middlewares = middlewares