|
@@ -0,0 +1,112 @@
|
|
|
+package http_client
|
|
|
+
|
|
|
+import (
|
|
|
+ "das/application/ports"
|
|
|
+ "encoding/json"
|
|
|
+ "errors"
|
|
|
+ "github.com/go-resty/resty/v2"
|
|
|
+)
|
|
|
+
|
|
|
+type Request struct {
|
|
|
+ request *resty.Request
|
|
|
+}
|
|
|
+
|
|
|
+func (request *Request) SetHeaders(headers map[string]string) {
|
|
|
+ request.request.SetHeaders(headers)
|
|
|
+}
|
|
|
+
|
|
|
+func (request *Request) SetQueryParams(queryParams map[string]string) {
|
|
|
+ request.request.SetQueryParams(queryParams)
|
|
|
+}
|
|
|
+
|
|
|
+func (request *Request) SetPathParams(pathParams map[string]string) {
|
|
|
+ request.request.SetPathParams(pathParams)
|
|
|
+}
|
|
|
+
|
|
|
+func (request *Request) Post(url string, body any, opts ...ports.RequestOption) (ports.HttpResponse, error) {
|
|
|
+ for _, opt := range opts {
|
|
|
+ opt(request)
|
|
|
+ }
|
|
|
+
|
|
|
+ restyRequest := request.request
|
|
|
+
|
|
|
+ resp, err := restyRequest.SetBody(body).Post(url)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+
|
|
|
+ if resp.IsError() {
|
|
|
+ return nil, errors.New(resp.Status())
|
|
|
+ }
|
|
|
+
|
|
|
+ return &Response{response: resp}, nil
|
|
|
+}
|
|
|
+
|
|
|
+func (request *Request) Delete(url string, opts ...ports.RequestOption) (ports.HttpResponse, error) {
|
|
|
+ for _, opt := range opts {
|
|
|
+ opt(request)
|
|
|
+ }
|
|
|
+
|
|
|
+ restyRequest := request.request
|
|
|
+
|
|
|
+ resp, err := restyRequest.Delete(url)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+
|
|
|
+ if resp.IsError() {
|
|
|
+ return nil, errors.New(resp.Status())
|
|
|
+ }
|
|
|
+
|
|
|
+ return &Response{response: resp}, nil
|
|
|
+}
|
|
|
+
|
|
|
+func (request *Request) Put(url string, body any, opts ...ports.RequestOption) (ports.HttpResponse, error) {
|
|
|
+ for _, opt := range opts {
|
|
|
+ opt(request)
|
|
|
+ }
|
|
|
+
|
|
|
+ restyRequest := request.request
|
|
|
+
|
|
|
+ resp, err := restyRequest.SetBody(body).Put(url)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+
|
|
|
+ if resp.IsError() {
|
|
|
+ return nil, errors.New(resp.Status())
|
|
|
+ }
|
|
|
+
|
|
|
+ return &Response{response: resp}, nil
|
|
|
+}
|
|
|
+
|
|
|
+func (request *Request) Get(url string, opts ...ports.RequestOption) (ports.HttpResponse, error) {
|
|
|
+ for _, opt := range opts {
|
|
|
+ opt(request)
|
|
|
+ }
|
|
|
+
|
|
|
+ restyRequest := request.request
|
|
|
+
|
|
|
+ resp, err := restyRequest.Get(url)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+
|
|
|
+ if resp.IsError() {
|
|
|
+ return nil, errors.New(resp.Status())
|
|
|
+ }
|
|
|
+
|
|
|
+ return &Response{response: resp}, nil
|
|
|
+}
|
|
|
+
|
|
|
+type Response struct {
|
|
|
+ response *resty.Response
|
|
|
+}
|
|
|
+
|
|
|
+func (response *Response) Body() []byte {
|
|
|
+ return response.response.Body()
|
|
|
+}
|
|
|
+
|
|
|
+func (response *Response) Json(resp any) error {
|
|
|
+ return json.Unmarshal(response.response.Body(), resp)
|
|
|
+}
|