| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- package gateway
- import (
- "git.sxidc.com/go-framework/baize/framework/core/api"
- "git.sxidc.com/go-tools/utils/http_client"
- "github.com/pkg/errors"
- )
- type ResponseSuccessCallback func(requestBuilder *RequestBuilder)
- type ResponseErrorCallback func(requestBuilder *RequestBuilder, err error)
- type BeforeRequestCallback func(requestBuilder *RequestBuilder) error
- type RequestResponseCallback func(requestBuilder *RequestBuilder, response *http_client.Response) error
- type RequestOption func(options *RequestOptions)
- type RequestOptions struct {
- beforeRequestCallback BeforeRequestCallback
- requestResponseCallback RequestResponseCallback
- }
- func WithBeforeRequestCallback(callback BeforeRequestCallback) RequestOption {
- return func(options *RequestOptions) {
- options.beforeRequestCallback = callback
- }
- }
- func WithRequestResponseCallback(callback RequestResponseCallback) RequestOption {
- return func(options *RequestOptions) {
- options.requestResponseCallback = callback
- }
- }
- type RequestBuilder struct {
- c *api.Context
- historyRequests []Request
- resultMap map[string]any
- httpRequest *http_client.Request
- params *requestBuilderParams
- }
- func newRequestBuilder(c *api.Context, httpRequest *http_client.Request) *RequestBuilder {
- return &RequestBuilder{
- c: c,
- historyRequests: make([]Request, 0),
- resultMap: make(map[string]any),
- httpRequest: httpRequest,
- params: newRequestBuilderParams(),
- }
- }
- func (builder *RequestBuilder) Context() *api.Context {
- return builder.c
- }
- func (builder *RequestBuilder) HistoryRequests() []Request {
- return builder.historyRequests
- }
- func (builder *RequestBuilder) GetResultMapValue(key string) any {
- return builder.resultMap[key]
- }
- func (builder *RequestBuilder) SetResultMapValue(key string, value any) {
- builder.resultMap[key] = value
- }
- func (builder *RequestBuilder) Post(request *PostRequest, opts ...RequestOption) *RequestBuilder {
- return builder.request(request, opts...)
- }
- func (builder *RequestBuilder) Delete(request *DeleteRequest, opts ...RequestOption) *RequestBuilder {
- return builder.request(request, opts...)
- }
- func (builder *RequestBuilder) Put(request *PutRequest, opts ...RequestOption) *RequestBuilder {
- return builder.request(request, opts...)
- }
- func (builder *RequestBuilder) Get(request *GetRequest, opts ...RequestOption) *RequestBuilder {
- return builder.request(request, opts...)
- }
- func (builder *RequestBuilder) request(builderRequest Request, opts ...RequestOption) *RequestBuilder {
- options := new(RequestOptions)
- for _, opt := range opts {
- opt(options)
- }
- builder.params.requestItems = append(builder.params.requestItems, newBuilderRequestItem(builderRequest, options))
- return builder
- }
- func (builder *RequestBuilder) ResponseSuccessCallback(responseSuccessCallback ResponseSuccessCallback) *RequestBuilder {
- builder.params.responseSuccessCallback = responseSuccessCallback
- return builder
- }
- func (builder *RequestBuilder) ResponseErrorCallback(responseErrorCallback ResponseErrorCallback) *RequestBuilder {
- builder.params.responseErrorCallback = responseErrorCallback
- return builder
- }
- func (builder *RequestBuilder) Request() {
- httpRequest := builder.httpRequest
- for _, requestItem := range builder.params.requestItems {
- if requestItem.options.beforeRequestCallback != nil {
- err := requestItem.options.beforeRequestCallback(builder)
- if err != nil {
- builder.params.responseErrorCallback(builder, errors.New(err.Error()))
- return
- }
- }
- requestWithResponse, err := requestItem.builderRequest.Request(builder.c, httpRequest)
- if err != nil {
- builder.params.responseErrorCallback(builder, errors.New(err.Error()))
- return
- }
- builder.historyRequests = append(builder.historyRequests, requestWithResponse)
- if requestItem.options.requestResponseCallback != nil {
- err := requestItem.options.requestResponseCallback(builder, requestWithResponse.Response())
- if err != nil {
- builder.params.responseErrorCallback(builder, errors.New(err.Error()))
- return
- }
- }
- }
- builder.params.responseSuccessCallback(builder)
- }
- func (builder *RequestBuilder) ResponseError(err error) {
- builder.params.responseErrorCallback(builder, err)
- }
|