github.com/unionj-cloud/go-doudou@v1.3.8-0.20221011095552-0088008e5b31/cmd/internal/openapi/v3/codegen/testdata/test/pageclient.go (about)

     1  package test
     2  
     3  import (
     4  	"context"
     5  	"encoding/json"
     6  	"fmt"
     7  	"net/http"
     8  
     9  	"github.com/go-resty/resty/v2"
    10  	"github.com/opentracing-contrib/go-stdlib/nethttp"
    11  	"github.com/opentracing/opentracing-go"
    12  	"github.com/pkg/errors"
    13  	ddhttp "github.com/unionj-cloud/go-doudou/framework/http"
    14  	"github.com/unionj-cloud/go-doudou/framework/registry"
    15  )
    16  
    17  type PageClient struct {
    18  	provider registry.IServiceProvider
    19  	client   *resty.Client
    20  	rootPath string
    21  }
    22  
    23  func (receiver *PageClient) SetRootPath(rootPath string) {
    24  	receiver.rootPath = rootPath
    25  }
    26  
    27  func (receiver *PageClient) SetProvider(provider registry.IServiceProvider) {
    28  	receiver.provider = provider
    29  }
    30  
    31  func (receiver *PageClient) SetClient(client *resty.Client) {
    32  	receiver.client = client
    33  }
    34  
    35  // PostPageUsers2 PageUsers2 demonstrate how to define POST and Content-Type as application/json api
    36  func (receiver *PageClient) PostPageUsers2(ctx context.Context, _headers map[string]string,
    37  	// comments above input and output struct type parameters in vo package will display on online document
    38  	// not comments here
    39  	bodyJSON *PageQuery) (ret PageUsers2Resp, _resp *resty.Response, err error) {
    40  	var _err error
    41  
    42  	_req := receiver.client.R()
    43  	_req.SetContext(ctx)
    44  	if len(_headers) > 0 {
    45  		_req.SetHeaders(_headers)
    46  	}
    47  	_req.SetBody(bodyJSON)
    48  
    49  	_resp, _err = _req.Post("/page/users/2")
    50  	if _err != nil {
    51  		err = errors.Wrap(_err, "")
    52  		return
    53  	}
    54  	if _resp.IsError() {
    55  		err = errors.New(_resp.String())
    56  		return
    57  	}
    58  	if _err = json.Unmarshal(_resp.Body(), &ret); _err != nil {
    59  		err = errors.Wrap(_err, "")
    60  		return
    61  	}
    62  	return
    63  }
    64  
    65  // PostPageUsers PageUsers demonstrate how to define POST and Content-Type as application/json api
    66  func (receiver *PageClient) PostPageUsers(ctx context.Context, _headers map[string]string,
    67  	// comments above input and output struct type parameters in vo package will display on online document
    68  	// not comments here
    69  	bodyJSON PageQuery) (ret PageUsersResp, _resp *resty.Response, err error) {
    70  	var _err error
    71  
    72  	_req := receiver.client.R()
    73  	_req.SetContext(ctx)
    74  	if len(_headers) > 0 {
    75  		_req.SetHeaders(_headers)
    76  	}
    77  	_req.SetBody(bodyJSON)
    78  
    79  	_resp, _err = _req.Post("/page/users")
    80  	if _err != nil {
    81  		err = errors.Wrap(_err, "")
    82  		return
    83  	}
    84  	if _resp.IsError() {
    85  		err = errors.New(_resp.String())
    86  		return
    87  	}
    88  	if _err = json.Unmarshal(_resp.Body(), &ret); _err != nil {
    89  		err = errors.Wrap(_err, "")
    90  		return
    91  	}
    92  	return
    93  }
    94  
    95  func NewPage(opts ...ddhttp.DdClientOption) *PageClient {
    96  	defaultProvider := ddhttp.NewServiceProvider("PAGE")
    97  	defaultClient := ddhttp.NewClient()
    98  
    99  	svcClient := &PageClient{
   100  		provider: defaultProvider,
   101  		client:   defaultClient,
   102  	}
   103  
   104  	for _, opt := range opts {
   105  		opt(svcClient)
   106  	}
   107  
   108  	svcClient.client.OnBeforeRequest(func(_ *resty.Client, request *resty.Request) error {
   109  		request.URL = svcClient.provider.SelectServer() + svcClient.rootPath + request.URL
   110  		return nil
   111  	})
   112  
   113  	svcClient.client.SetPreRequestHook(func(_ *resty.Client, request *http.Request) error {
   114  		traceReq, _ := nethttp.TraceRequest(opentracing.GlobalTracer(), request,
   115  			nethttp.OperationName(fmt.Sprintf("HTTP %s: %s", request.Method, request.URL.Path)))
   116  		*request = *traceReq
   117  		return nil
   118  	})
   119  
   120  	svcClient.client.OnAfterResponse(func(_ *resty.Client, response *resty.Response) error {
   121  		nethttp.TracerFromRequest(response.Request.RawRequest).Finish()
   122  		return nil
   123  	})
   124  
   125  	return svcClient
   126  }