github.com/unionj-cloud/go-doudou@v1.3.8-0.20221011095552-0088008e5b31/cmd/internal/openapi/v3/codegen/testdata/test/uploadclient.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  	_querystring "github.com/google/go-querystring/query"
    11  	"github.com/opentracing-contrib/go-stdlib/nethttp"
    12  	"github.com/opentracing/opentracing-go"
    13  	"github.com/pkg/errors"
    14  	ddhttp "github.com/unionj-cloud/go-doudou/framework/http"
    15  	"github.com/unionj-cloud/go-doudou/framework/registry"
    16  	v3 "github.com/unionj-cloud/go-doudou/toolkit/openapi/v3"
    17  )
    18  
    19  type UploadClient struct {
    20  	provider registry.IServiceProvider
    21  	client   *resty.Client
    22  	rootPath string
    23  }
    24  
    25  func (receiver *UploadClient) SetRootPath(rootPath string) {
    26  	receiver.rootPath = rootPath
    27  }
    28  
    29  func (receiver *UploadClient) SetProvider(provider registry.IServiceProvider) {
    30  	receiver.provider = provider
    31  }
    32  
    33  func (receiver *UploadClient) SetClient(client *resty.Client) {
    34  	receiver.client = client
    35  }
    36  
    37  // PostUploadAvatar2 UploadAvatar2 demonstrate how to define upload files api
    38  // remember to close the readers by Close method of v3.FileModel if you don't need them anymore when you finished your own business logic
    39  func (receiver *UploadClient) PostUploadAvatar2(ctx context.Context, _headers map[string]string,
    40  	bodyParams struct {
    41  		// required
    42  		Ps string `json:"ps,omitempty" url:"ps"`
    43  	},
    44  	pf []v3.FileModel,
    45  	pf2 *v3.FileModel,
    46  	pf3 *v3.FileModel) (ret UploadAvatar2Resp, _resp *resty.Response, err error) {
    47  	var _err error
    48  
    49  	_req := receiver.client.R()
    50  	_req.SetContext(ctx)
    51  	if len(_headers) > 0 {
    52  		_req.SetHeaders(_headers)
    53  	}
    54  	_bodyParams, _ := _querystring.Values(bodyParams)
    55  	_req.SetFormDataFromValues(_bodyParams)
    56  	if len(pf) == 0 {
    57  		err = errors.New("at least one file should be uploaded for parameter pf")
    58  		return
    59  	}
    60  	for _, _f := range pf {
    61  		_req.SetFileReader("pf", _f.Filename, _f.Reader)
    62  	}
    63  	if pf2 != nil {
    64  		_req.SetFileReader("pf2", pf2.Filename, pf2.Reader)
    65  	}
    66  	if pf3 != nil {
    67  		_req.SetFileReader("pf3", pf3.Filename, pf3.Reader)
    68  	}
    69  
    70  	_resp, _err = _req.Post("/upload/avatar/2")
    71  	if _err != nil {
    72  		err = errors.Wrap(_err, "")
    73  		return
    74  	}
    75  	if _resp.IsError() {
    76  		err = errors.New(_resp.String())
    77  		return
    78  	}
    79  	if _err = json.Unmarshal(_resp.Body(), &ret); _err != nil {
    80  		err = errors.Wrap(_err, "")
    81  		return
    82  	}
    83  	return
    84  }
    85  
    86  // PostUploadAvatar UploadAvatar demonstrate how to define upload files api
    87  // there must be one []v3.FileModel or v3.FileModel parameter among input parameters
    88  // remember to close the readers by Close method of v3.FileModel if you don't need them anymore when you finished your own business logic
    89  func (receiver *UploadClient) PostUploadAvatar(ctx context.Context, _headers map[string]string,
    90  	bodyParams struct {
    91  		// required
    92  		Ps string `json:"ps,omitempty" url:"ps"`
    93  	},
    94  	pf []v3.FileModel) (ret UploadAvatarResp, _resp *resty.Response, err error) {
    95  	var _err error
    96  
    97  	_req := receiver.client.R()
    98  	_req.SetContext(ctx)
    99  	if len(_headers) > 0 {
   100  		_req.SetHeaders(_headers)
   101  	}
   102  	_bodyParams, _ := _querystring.Values(bodyParams)
   103  	_req.SetFormDataFromValues(_bodyParams)
   104  	if len(pf) == 0 {
   105  		err = errors.New("at least one file should be uploaded for parameter pf")
   106  		return
   107  	}
   108  	for _, _f := range pf {
   109  		_req.SetFileReader("pf", _f.Filename, _f.Reader)
   110  	}
   111  
   112  	_resp, _err = _req.Post("/upload/avatar")
   113  	if _err != nil {
   114  		err = errors.Wrap(_err, "")
   115  		return
   116  	}
   117  	if _resp.IsError() {
   118  		err = errors.New(_resp.String())
   119  		return
   120  	}
   121  	if _err = json.Unmarshal(_resp.Body(), &ret); _err != nil {
   122  		err = errors.Wrap(_err, "")
   123  		return
   124  	}
   125  	return
   126  }
   127  
   128  func NewUpload(opts ...ddhttp.DdClientOption) *UploadClient {
   129  	defaultProvider := ddhttp.NewServiceProvider("UPLOAD")
   130  	defaultClient := ddhttp.NewClient()
   131  
   132  	svcClient := &UploadClient{
   133  		provider: defaultProvider,
   134  		client:   defaultClient,
   135  	}
   136  
   137  	for _, opt := range opts {
   138  		opt(svcClient)
   139  	}
   140  
   141  	svcClient.client.OnBeforeRequest(func(_ *resty.Client, request *resty.Request) error {
   142  		request.URL = svcClient.provider.SelectServer() + svcClient.rootPath + request.URL
   143  		return nil
   144  	})
   145  
   146  	svcClient.client.SetPreRequestHook(func(_ *resty.Client, request *http.Request) error {
   147  		traceReq, _ := nethttp.TraceRequest(opentracing.GlobalTracer(), request,
   148  			nethttp.OperationName(fmt.Sprintf("HTTP %s: %s", request.Method, request.URL.Path)))
   149  		*request = *traceReq
   150  		return nil
   151  	})
   152  
   153  	svcClient.client.OnAfterResponse(func(_ *resty.Client, response *resty.Response) error {
   154  		nethttp.TracerFromRequest(response.Request.RawRequest).Finish()
   155  		return nil
   156  	})
   157  
   158  	return svcClient
   159  }