|
|
@@ -6,13 +6,10 @@ import (
|
|
|
"time"
|
|
|
)
|
|
|
|
|
|
-type Result struct {
|
|
|
- Result map[string]any
|
|
|
- Custom map[string]any
|
|
|
-}
|
|
|
-
|
|
|
-type RequestCallbackFunc func(c *api.Context, response *http_client.Response, err error, customResultMap map[string]any)
|
|
|
-type GlobalRequestCallbackFunc func(c *api.Context, request BuilderRequest, err error, historyRequests []BuilderRequest, customResultMap map[string]any)
|
|
|
+type RequestCallbackFunc func(c *api.Context, response *http_client.Response, customResultMap map[string]any) error
|
|
|
+type GlobalRequestCallbackFunc func(c *api.Context, request BuilderRequest, historyRequests []BuilderRequest, customResultMap map[string]any) error
|
|
|
+type ResponseSuccessFunc func(c *api.Context, historyRequests []BuilderRequest, customResultMap map[string]any)
|
|
|
+type ResponseErrorFunc func(c *api.Context, err error)
|
|
|
|
|
|
type Builder struct {
|
|
|
router api.Router
|
|
|
@@ -53,47 +50,63 @@ func (builder *Builder) Get(request *GetRequest, requestCallbackFunc RequestCall
|
|
|
return builder.addRequest(newBuilderRequestItem(request, requestCallbackFunc))
|
|
|
}
|
|
|
|
|
|
-func (builder *Builder) RequestCallbackFunc(globalRequestCallbackFunc GlobalRequestCallbackFunc) *Builder {
|
|
|
+func (builder *Builder) GlobalRequestCallbackFunc(globalRequestCallbackFunc GlobalRequestCallbackFunc) *Builder {
|
|
|
copyBuilder := builder.copy()
|
|
|
copyBuilder.params.globalRequestCallbackFunc = globalRequestCallbackFunc
|
|
|
return copyBuilder
|
|
|
}
|
|
|
|
|
|
+func (builder *Builder) ResponseSuccessFunc(responseSuccessFunc ResponseSuccessFunc) *Builder {
|
|
|
+ copyBuilder := builder.copy()
|
|
|
+ copyBuilder.params.responseSuccessFunc = responseSuccessFunc
|
|
|
+ return copyBuilder
|
|
|
+}
|
|
|
+
|
|
|
+func (builder *Builder) ResponseErrorFunc(responseErrorFunc ResponseErrorFunc) *Builder {
|
|
|
+ copyBuilder := builder.copy()
|
|
|
+ copyBuilder.params.responseErrorFunc = responseErrorFunc
|
|
|
+ return copyBuilder
|
|
|
+}
|
|
|
+
|
|
|
func (builder *Builder) Build(middlewares ...api.Handler) {
|
|
|
copyBuilder := builder.copy()
|
|
|
copyBuilder.router.AddRoute(builder.params.httpMethod, builder.params.relativePath, append(middlewares,
|
|
|
func(c *api.Context) {
|
|
|
httpRequest := builder.httpClient.NewRequest(http_client.WithNewRequestTimeout(time.Duration(builder.httpTimeoutSec) * time.Second))
|
|
|
historyRequests := make([]BuilderRequest, 0)
|
|
|
- result := Result{
|
|
|
- Result: make(map[string]any),
|
|
|
- Custom: make(map[string]any),
|
|
|
- }
|
|
|
+ resultMap := make(map[string]any)
|
|
|
|
|
|
for _, requestItem := range builder.params.requestItems {
|
|
|
err := requestItem.request.Request(httpRequest)
|
|
|
-
|
|
|
- if requestItem.requestCallbackFunc != nil {
|
|
|
- requestItem.requestCallbackFunc(c, requestItem.request.Response(), err, result.Custom)
|
|
|
+ if err != nil {
|
|
|
+ builder.params.responseErrorFunc(c, err)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- if builder.params.globalRequestCallbackFunc != nil {
|
|
|
- builder.params.globalRequestCallbackFunc(c, requestItem.request, err, historyRequests, result.Custom)
|
|
|
+ if requestItem.requestCallbackFunc != nil {
|
|
|
+ err := requestItem.requestCallbackFunc(c, requestItem.request.Response(), resultMap)
|
|
|
+ if err != nil {
|
|
|
+ builder.params.responseErrorFunc(c, err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
- // TODO
|
|
|
- if err != nil {
|
|
|
+ if builder.params.globalRequestCallbackFunc != nil {
|
|
|
+ err := builder.params.globalRequestCallbackFunc(c, requestItem.request, historyRequests, resultMap)
|
|
|
+ if err != nil {
|
|
|
+ builder.params.responseErrorFunc(c, err)
|
|
|
+ return
|
|
|
+ }
|
|
|
|
|
|
+ continue
|
|
|
}
|
|
|
|
|
|
historyRequests = append(historyRequests, requestItem.request)
|
|
|
-
|
|
|
- return
|
|
|
}
|
|
|
|
|
|
- // TODO 最终结果处理
|
|
|
+ builder.params.responseSuccessFunc(c, historyRequests, resultMap)
|
|
|
})...)
|
|
|
}
|
|
|
|
|
|
@@ -105,6 +118,6 @@ func (builder *Builder) addRequest(item *builderRequestItem) *Builder {
|
|
|
|
|
|
func (builder *Builder) copy() *Builder {
|
|
|
copyBuilder := newBuilder(builder.router, builder.httpClient)
|
|
|
- copyBuilder.params = copyBuilder.params.copy()
|
|
|
+ copyBuilder.params = builder.params.copy()
|
|
|
return copyBuilder
|
|
|
}
|