From e6fa0d58efd082b9ad860c718d8e1cee77dbcb42 Mon Sep 17 00:00:00 2001 From: gabs Date: Thu, 7 Mar 2024 17:43:24 -0300 Subject: [PATCH 1/4] Change pkgs --- pkg/customer/client.go | 4 +-- pkg/customer/client_test.go | 4 +-- pkg/customer/search_request.go | 45 +++++++++++-------------- pkg/invoice/client.go | 4 +-- pkg/invoice/client_test.go | 4 +-- pkg/invoice/search_request.go | 45 +++++++++++-------------- pkg/merchantorder/client.go | 4 +-- pkg/merchantorder/client_test.go | 4 +-- pkg/merchantorder/search_request.go | 45 +++++++++++-------------- pkg/payment/client.go | 4 +-- pkg/payment/client_test.go | 4 +-- pkg/payment/search_request.go | 47 ++++++++++++--------------- pkg/preapprovalplan/client.go | 4 +-- pkg/preapprovalplan/client_test.go | 4 +-- pkg/preapprovalplan/search_request.go | 45 +++++++++++-------------- pkg/preference/client.go | 8 ++--- pkg/preference/client_test.go | 4 +-- pkg/preference/search_request.go | 46 ++++++++++++-------------- 18 files changed, 143 insertions(+), 182 deletions(-) diff --git a/pkg/customer/client.go b/pkg/customer/client.go index bd7f5e03..c109c9cf 100644 --- a/pkg/customer/client.go +++ b/pkg/customer/client.go @@ -64,10 +64,10 @@ func (c *client) Create(ctx context.Context, request Request) (*Response, error) } func (c *client) Search(ctx context.Context, request SearchRequest) (*SearchResponse, error) { - request.SetDefaults() + queryParams := request.GetParams() requestData := httpclient.RequestData{ - QueryParams: request.Filters, + QueryParams: queryParams, Method: http.MethodGet, URL: urlSearch, } diff --git a/pkg/customer/client_test.go b/pkg/customer/client_test.go index 478afff4..c15b6c1d 100644 --- a/pkg/customer/client_test.go +++ b/pkg/customer/client_test.go @@ -161,8 +161,8 @@ func TestSearch(t *testing.T) { Filters: map[string]string{ "EMAIL": "test_user_30851371@testuser.com", }, - Limit: "10", - Offset: "10", + Limit: 10, + Offset: 10, }, }, want: &SearchResponse{ diff --git a/pkg/customer/search_request.go b/pkg/customer/search_request.go index be70c7fc..3bf63815 100644 --- a/pkg/customer/search_request.go +++ b/pkg/customer/search_request.go @@ -1,40 +1,33 @@ package customer -import "strings" +import ( + "strconv" + "strings" +) -// SearchRequest is the request to search services. +// SearchRequest is the helper structure to build search request. // Filters field can receive a lot of parameters. For details, see: // https://www.mercadopago.com/developers/en/reference/customers/_customers_search/get. type SearchRequest struct { Filters map[string]string - Limit string - Offset string + Limit int + Offset int } -// SetDefaults sets values for limit and offset when not sent. -func (s *SearchRequest) SetDefaults() { - if len(s.Filters) == 0 { - s.Filters = make(map[string]string, 2) - } else { - for k, v := range s.Filters { - delete(s.Filters, k) - s.Filters[strings.ToLower(k)] = v - } +// GetParams creates map to build query parameters. Keys will be changed to lower case. +func (sr *SearchRequest) GetParams() map[string]string { + params := map[string]string{} + for k, v := range sr.Filters { + key := strings.ToLower(k) + params[key] = v } - if _, ok := s.Filters["limit"]; !ok { - limit := "30" - if s.Limit != "" { - limit = s.Limit - } - s.Filters["limit"] = limit - } - if _, ok := s.Filters["offset"]; !ok { - offset := "0" - if s.Offset != "" { - offset = s.Offset - } - s.Filters["offset"] = offset + if sr.Limit == 0 { + sr.Limit = 30 } + params["limit"] = strconv.Itoa(sr.Limit) + params["offset"] = strconv.Itoa(sr.Offset) + + return params } diff --git a/pkg/invoice/client.go b/pkg/invoice/client.go index 1ab9c699..be464259 100644 --- a/pkg/invoice/client.go +++ b/pkg/invoice/client.go @@ -58,10 +58,10 @@ func (c *client) Get(ctx context.Context, id string) (*Response, error) { } func (c *client) Search(ctx context.Context, request SearchRequest) (*SearchResponse, error) { - request.SetDefaults() + queryParameters := request.GetParams() requestData := httpclient.RequestData{ - QueryParams: request.Filters, + QueryParams: queryParameters, Method: http.MethodGet, URL: urlSearch, } diff --git a/pkg/invoice/client_test.go b/pkg/invoice/client_test.go index 2b63cf28..3aa9f2f2 100644 --- a/pkg/invoice/client_test.go +++ b/pkg/invoice/client_test.go @@ -168,8 +168,8 @@ func TestSearch(t *testing.T) { args: args{ ctx: context.Background(), request: SearchRequest{ - Limit: "10", - Offset: "10", + Limit: 10, + Offset: 10, Filters: map[string]string{ "iD": uuid.NewString(), }, diff --git a/pkg/invoice/search_request.go b/pkg/invoice/search_request.go index 79c2bacd..28469640 100644 --- a/pkg/invoice/search_request.go +++ b/pkg/invoice/search_request.go @@ -1,38 +1,31 @@ package invoice -import "strings" +import ( + "strconv" + "strings" +) -// SearchRequest contains filters accepted in search. +// SearchRequest is the helper structure to build search request. type SearchRequest struct { Filters map[string]string - Limit string - Offset string + Limit int + Offset int } -// SetDefaults sets values for limit and offset when not sent. -func (s *SearchRequest) SetDefaults() { - if len(s.Filters) == 0 { - s.Filters = make(map[string]string, 2) - } else { - for k, v := range s.Filters { - delete(s.Filters, k) - s.Filters[strings.ToLower(k)] = v - } +// GetParams creates map to build query parameters. Keys will be changed to lower case. +func (sr *SearchRequest) GetParams() map[string]string { + params := map[string]string{} + for k, v := range sr.Filters { + key := strings.ToLower(k) + params[key] = v } - if _, ok := s.Filters["limit"]; !ok { - limit := "30" - if s.Limit != "" { - limit = s.Limit - } - s.Filters["limit"] = limit - } - if _, ok := s.Filters["offset"]; !ok { - offset := "0" - if s.Offset != "" { - offset = s.Offset - } - s.Filters["offset"] = offset + if sr.Limit == 0 { + sr.Limit = 30 } + params["limit"] = strconv.Itoa(sr.Limit) + params["offset"] = strconv.Itoa(sr.Offset) + + return params } diff --git a/pkg/merchantorder/client.go b/pkg/merchantorder/client.go index ef489c87..cf1e4af7 100644 --- a/pkg/merchantorder/client.go +++ b/pkg/merchantorder/client.go @@ -69,10 +69,10 @@ func (c *client) Get(ctx context.Context, id int64) (*Response, error) { } func (c *client) Search(ctx context.Context, request SearchRequest) (*SearchResponse, error) { - request.SetDefaults() + queryParams := request.GetParams() requestData := httpclient.RequestData{ - QueryParams: request.Filters, + QueryParams: queryParams, Method: http.MethodGet, URL: urlSearch, } diff --git a/pkg/merchantorder/client_test.go b/pkg/merchantorder/client_test.go index acf9e31a..7b7b08dd 100644 --- a/pkg/merchantorder/client_test.go +++ b/pkg/merchantorder/client_test.go @@ -295,8 +295,8 @@ func TestSearch(t *testing.T) { args: args{ ctx: context.Background(), request: SearchRequest{ - Limit: "1", - Offset: "1", + Limit: 1, + Offset: 1, Filters: map[string]string{"preference": "134445566"}, }, }, diff --git a/pkg/merchantorder/search_request.go b/pkg/merchantorder/search_request.go index 22ec9b55..f20f9571 100644 --- a/pkg/merchantorder/search_request.go +++ b/pkg/merchantorder/search_request.go @@ -1,40 +1,33 @@ package merchantorder -import "strings" +import ( + "strconv" + "strings" +) -// SearchRequest is the request to search services. +// SearchRequest is the helper structure to build search request. // Filters field can receive a lot of paramaters. For details, see: // https://www.mercadopago.com/developers/en/reference/merchant_orders/_merchant_orders_search/get. type SearchRequest struct { Filters map[string]string - Limit string - Offset string + Limit int + Offset int } -// SetDefaults sets values for limit and offset when not sent. -func (s *SearchRequest) SetDefaults() { - if len(s.Filters) == 0 { - s.Filters = make(map[string]string, 2) - } else { - for k, v := range s.Filters { - delete(s.Filters, k) - s.Filters[strings.ToLower(k)] = v - } +// GetParams creates map to build query parameters. Keys will be changed to lower case. +func (sr *SearchRequest) GetParams() map[string]string { + params := map[string]string{} + for k, v := range sr.Filters { + key := strings.ToLower(k) + params[key] = v } - if _, ok := s.Filters["limit"]; !ok { - limit := "30" - if s.Limit != "" { - limit = s.Limit - } - s.Filters["limit"] = limit - } - if _, ok := s.Filters["offset"]; !ok { - offset := "0" - if s.Offset != "" { - offset = s.Offset - } - s.Filters["offset"] = offset + if sr.Limit == 0 { + sr.Limit = 30 } + params["limit"] = strconv.Itoa(sr.Limit) + params["offset"] = strconv.Itoa(sr.Offset) + + return params } diff --git a/pkg/payment/client.go b/pkg/payment/client.go index b123963b..4df343e4 100644 --- a/pkg/payment/client.go +++ b/pkg/payment/client.go @@ -72,10 +72,10 @@ func (c *client) Create(ctx context.Context, request Request) (*Response, error) } func (c *client) Search(ctx context.Context, request SearchRequest) (*SearchResponse, error) { - request.SetDefaults() + queryParams := request.GetParams() requestData := httpclient.RequestData{ - QueryParams: request.Filters, + QueryParams: queryParams, Method: http.MethodGet, URL: urlSearch, } diff --git a/pkg/payment/client_test.go b/pkg/payment/client_test.go index 8324c522..f92d33b5 100644 --- a/pkg/payment/client_test.go +++ b/pkg/payment/client_test.go @@ -167,8 +167,8 @@ func TestSearch(t *testing.T) { Filters: map[string]string{ "ExTernal_RefeRENCE": uuid.NewString(), }, - Limit: "30", - Offset: "10", + Limit: 30, + Offset: 10, }, }, want: &SearchResponse{ diff --git a/pkg/payment/search_request.go b/pkg/payment/search_request.go index ef19a22c..8c3f133e 100644 --- a/pkg/payment/search_request.go +++ b/pkg/payment/search_request.go @@ -1,40 +1,33 @@ package payment -import "strings" +import ( + "strconv" + "strings" +) -// SearchRequest is the request to search services. +// SearchRequest is the helper structure to build search request. // Filters field can receive a lot of paramaters. For details, see: -// https://www.mercadopago.com.br/developers/pt/reference/payments/_payments_search/get. +// https://www.mercadopago.com/developers/en/reference/payments/_payments_search/get. type SearchRequest struct { Filters map[string]string - Limit string - Offset string + Limit int + Offset int } -// SetDefaults sets values for limit and offset when not sent. -func (s *SearchRequest) SetDefaults() { - if len(s.Filters) == 0 { - s.Filters = make(map[string]string, 2) - } else { - for k, v := range s.Filters { - delete(s.Filters, k) - s.Filters[strings.ToLower(k)] = v - } +// GetParams creates map to build query parameters. Keys will be changed to lower case. +func (sr *SearchRequest) GetParams() map[string]string { + params := map[string]string{} + for k, v := range sr.Filters { + key := strings.ToLower(k) + params[key] = v } - if _, ok := s.Filters["limit"]; !ok { - limit := "30" - if s.Limit != "" { - limit = s.Limit - } - s.Filters["limit"] = limit - } - if _, ok := s.Filters["offset"]; !ok { - offset := "0" - if s.Offset != "" { - offset = s.Offset - } - s.Filters["offset"] = offset + if sr.Limit == 0 { + sr.Limit = 30 } + params["limit"] = strconv.Itoa(sr.Limit) + params["offset"] = strconv.Itoa(sr.Offset) + + return params } diff --git a/pkg/preapprovalplan/client.go b/pkg/preapprovalplan/client.go index 0fe13e4b..b64ef022 100644 --- a/pkg/preapprovalplan/client.go +++ b/pkg/preapprovalplan/client.go @@ -101,10 +101,10 @@ func (c *client) Update(ctx context.Context, request Request, id string) (*Respo } func (c *client) Search(ctx context.Context, request SearchRequest) (*SearchResponse, error) { - request.SetDefaults() + queryParams := request.GetParams() requestData := httpclient.RequestData{ - QueryParams: request.Filters, + QueryParams: queryParams, Method: http.MethodGet, URL: urlSearch, } diff --git a/pkg/preapprovalplan/client_test.go b/pkg/preapprovalplan/client_test.go index 8e1ab691..2cbec20d 100644 --- a/pkg/preapprovalplan/client_test.go +++ b/pkg/preapprovalplan/client_test.go @@ -399,8 +399,8 @@ func TestSearch(t *testing.T) { args: args{ ctx: context.Background(), request: SearchRequest{ - Limit: "10", - Offset: "10", + Limit: 10, + Offset: 10, Filters: map[string]string{ "iD": uuid.NewString(), }, diff --git a/pkg/preapprovalplan/search_request.go b/pkg/preapprovalplan/search_request.go index 310f6970..820987f7 100644 --- a/pkg/preapprovalplan/search_request.go +++ b/pkg/preapprovalplan/search_request.go @@ -1,40 +1,33 @@ package preapprovalplan -import "strings" +import ( + "strconv" + "strings" +) -// SearchRequest contains filters accepted in search. +// SearchRequest is the helper structure to build search request. // Filters field can receive a lot of parameters. For details, see: // https://www.mercadopago.com/developers/en/reference/subscriptions/_preapproval_plan_id/get type SearchRequest struct { Filters map[string]string - Limit string - Offset string + Limit int + Offset int } -// SetDefaults sets values for limit and offset when not sent. -func (s *SearchRequest) SetDefaults() { - if len(s.Filters) == 0 { - s.Filters = make(map[string]string, 2) - } else { - for k, v := range s.Filters { - delete(s.Filters, k) - s.Filters[strings.ToLower(k)] = v - } +// GetParams creates map to build query parameters. Keys will be changed to lower case. +func (sr *SearchRequest) GetParams() map[string]string { + params := map[string]string{} + for k, v := range sr.Filters { + key := strings.ToLower(k) + params[key] = v } - if _, ok := s.Filters["limit"]; !ok { - limit := "30" - if s.Limit != "" { - limit = s.Limit - } - s.Filters["limit"] = limit - } - if _, ok := s.Filters["offset"]; !ok { - offset := "0" - if s.Offset != "" { - offset = s.Offset - } - s.Filters["offset"] = offset + if sr.Limit == 0 { + sr.Limit = 30 } + params["limit"] = strconv.Itoa(sr.Limit) + params["offset"] = strconv.Itoa(sr.Offset) + + return params } diff --git a/pkg/preference/client.go b/pkg/preference/client.go index 8d24ecf6..73781eac 100644 --- a/pkg/preference/client.go +++ b/pkg/preference/client.go @@ -101,12 +101,12 @@ func (c *client) Update(ctx context.Context, request Request, id string) (*Respo } func (c *client) Search(ctx context.Context, request SearchRequest) (*SearchResponsePage, error) { - request.SetDefaults() + queryParams := request.GetParams() requestData := httpclient.RequestData{ - Body: request, - Method: http.MethodGet, - URL: urlBase, + QueryParams: queryParams, + Method: http.MethodGet, + URL: urlBase, } result, err := httpclient.DoRequest[*SearchResponsePage](ctx, c.cfg, requestData) if err != nil { diff --git a/pkg/preference/client_test.go b/pkg/preference/client_test.go index adf87fa2..839199bc 100644 --- a/pkg/preference/client_test.go +++ b/pkg/preference/client_test.go @@ -459,8 +459,8 @@ func TestSearch(t *testing.T) { } dto := SearchRequest{ - Limit: "22", - Offset: "100", + Limit: 22, + Offset: 100, } got, err := c.Search(tt.args.ctx, dto) gotErr := "" diff --git a/pkg/preference/search_request.go b/pkg/preference/search_request.go index ce7de3a6..7673fe36 100644 --- a/pkg/preference/search_request.go +++ b/pkg/preference/search_request.go @@ -1,37 +1,33 @@ package preference -import "strings" +import ( + "strconv" + "strings" +) -// SearchRequest contains filters accepted in search +// SearchRequest is the helper structure to build search request. +// Filters field can receive a lot of paramaters. For details, see: +// https://www.mercadopago.com/developers/en/reference/preferences/_checkout_preferences_search/get. type SearchRequest struct { Filters map[string]string - Limit string - Offset string + Limit int + Offset int } -func (s *SearchRequest) SetDefaults() { - if len(s.Filters) == 0 { - s.Filters = make(map[string]string, 2) - } else { - for k, v := range s.Filters { - delete(s.Filters, k) - s.Filters[strings.ToLower(k)] = v - } +// GetParams creates map to build query parameters. Keys will be changed to lower case. +func (sr *SearchRequest) GetParams() map[string]string { + params := map[string]string{} + for k, v := range sr.Filters { + key := strings.ToLower(k) + params[key] = v } - if _, ok := s.Filters["limit"]; !ok { - limit := "30" - if s.Limit != "" { - limit = s.Limit - } - s.Filters["limit"] = limit - } - if _, ok := s.Filters["offset"]; !ok { - offset := "0" - if s.Offset != "" { - offset = s.Offset - } - s.Filters["offset"] = offset + if sr.Limit == 0 { + sr.Limit = 30 } + params["limit"] = strconv.Itoa(sr.Limit) + params["offset"] = strconv.Itoa(sr.Offset) + + return params } From 7a17ee89eeb267e849b782082c2ab1d169df55f8 Mon Sep 17 00:00:00 2001 From: gabs Date: Thu, 7 Mar 2024 17:44:30 -0300 Subject: [PATCH 2/4] Change examples --- examples/apis/invoice/search/main.go | 5 +++-- examples/apis/preapprovalplan/search/main.go | 5 +++-- examples/apis/preference/search/main.go | 4 ++-- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/examples/apis/invoice/search/main.go b/examples/apis/invoice/search/main.go index 5e4db46e..a5574886 100644 --- a/examples/apis/invoice/search/main.go +++ b/examples/apis/invoice/search/main.go @@ -3,6 +3,7 @@ package main import ( "context" "fmt" + "github.com/mercadopago/sdk-go/pkg/config" "github.com/mercadopago/sdk-go/pkg/invoice" ) @@ -17,8 +18,8 @@ func main() { client := invoice.NewClient(cfg) req := invoice.SearchRequest{ - Limit: "10", - Offset: "10", + Limit: 10, + Offset: 10, Filters: map[string]string{ "preapproval_id": "preapproval_id", }, diff --git a/examples/apis/preapprovalplan/search/main.go b/examples/apis/preapprovalplan/search/main.go index 46103f8f..f6d439fa 100644 --- a/examples/apis/preapprovalplan/search/main.go +++ b/examples/apis/preapprovalplan/search/main.go @@ -3,6 +3,7 @@ package main import ( "context" "fmt" + "github.com/mercadopago/sdk-go/pkg/preapprovalplan" "github.com/mercadopago/sdk-go/pkg/config" @@ -18,8 +19,8 @@ func main() { client := preapprovalplan.NewClient(cfg) filters := preapprovalplan.SearchRequest{ - Limit: "10", - Offset: "10", + Limit: 10, + Offset: 10, Filters: map[string]string{ "status": "active", }, diff --git a/examples/apis/preference/search/main.go b/examples/apis/preference/search/main.go index 41824a36..5c720098 100644 --- a/examples/apis/preference/search/main.go +++ b/examples/apis/preference/search/main.go @@ -20,8 +20,8 @@ func main() { filter := make(map[string]string) filter["external_reference"] = "wee3rffee23" filters := preference.SearchRequest{ - Limit: "10", - Offset: "10", + Limit: 10, + Offset: 10, Filters: filter, } From 8d31f333b14257df4e94227c2654094af1eeabed Mon Sep 17 00:00:00 2001 From: gabs Date: Thu, 7 Mar 2024 17:45:33 -0300 Subject: [PATCH 3/4] Change tests --- test/integration/invoice/invoice_test.go | 9 +++++---- test/integration/merchantorder/merchant_order_test.go | 2 +- .../preapproval_plan/preapproval_plan_test.go | 9 +++++---- test/integration/preference/preference_test.go | 4 ++-- 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/test/integration/invoice/invoice_test.go b/test/integration/invoice/invoice_test.go index 0a8c87f1..4d3fadd6 100644 --- a/test/integration/invoice/invoice_test.go +++ b/test/integration/invoice/invoice_test.go @@ -2,10 +2,11 @@ package integration import ( "context" - "github.com/mercadopago/sdk-go/pkg/config" - "github.com/mercadopago/sdk-go/pkg/invoice" "os" "testing" + + "github.com/mercadopago/sdk-go/pkg/config" + "github.com/mercadopago/sdk-go/pkg/invoice" ) func TestInvoice(t *testing.T) { @@ -33,8 +34,8 @@ func TestInvoice(t *testing.T) { } filters := invoice.SearchRequest{ - Limit: "10", - Offset: "10", + Limit: 10, + Offset: 10, Filters: map[string]string{ "preapproval_id": "id", }, diff --git a/test/integration/merchantorder/merchant_order_test.go b/test/integration/merchantorder/merchant_order_test.go index ee67488f..e32bfe40 100644 --- a/test/integration/merchantorder/merchant_order_test.go +++ b/test/integration/merchantorder/merchant_order_test.go @@ -234,7 +234,7 @@ func TestMerchantOrder(t *testing.T) { } req := merchantorder.SearchRequest{ - Limit: "5", + Limit: 5, } client := merchantorder.NewClient(cfg) diff --git a/test/integration/preapproval_plan/preapproval_plan_test.go b/test/integration/preapproval_plan/preapproval_plan_test.go index a7a6792b..ce2a3b50 100644 --- a/test/integration/preapproval_plan/preapproval_plan_test.go +++ b/test/integration/preapproval_plan/preapproval_plan_test.go @@ -2,10 +2,11 @@ package integration import ( "context" - "github.com/mercadopago/sdk-go/pkg/config" - "github.com/mercadopago/sdk-go/pkg/preapprovalplan" "os" "testing" + + "github.com/mercadopago/sdk-go/pkg/config" + "github.com/mercadopago/sdk-go/pkg/preapprovalplan" ) func TestPreApprovalPlan(t *testing.T) { @@ -165,8 +166,8 @@ func TestPreApprovalPlan(t *testing.T) { } filters := preapprovalplan.SearchRequest{ - Limit: "10", - Offset: "10", + Limit: 10, + Offset: 10, } client := preapprovalplan.NewClient(cfg) diff --git a/test/integration/preference/preference_test.go b/test/integration/preference/preference_test.go index 571c1aeb..17f13ba5 100644 --- a/test/integration/preference/preference_test.go +++ b/test/integration/preference/preference_test.go @@ -138,8 +138,8 @@ func TestPreference(t *testing.T) { } filters := preference.SearchRequest{ - Limit: "10", - Offset: "10", + Limit: 10, + Offset: 10, } client := preference.NewClient(cfg) From 884e4cf394275764f0e18b56d3b6d9db6f6613e4 Mon Sep 17 00:00:00 2001 From: gabs Date: Thu, 7 Mar 2024 17:59:02 -0300 Subject: [PATCH 4/4] Add cover to preference search --- pkg/preference/client_test.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pkg/preference/client_test.go b/pkg/preference/client_test.go index 839199bc..dae7cf82 100644 --- a/pkg/preference/client_test.go +++ b/pkg/preference/client_test.go @@ -459,7 +459,10 @@ func TestSearch(t *testing.T) { } dto := SearchRequest{ - Limit: 22, + Filters: map[string]string{ + "SponSOR_ID": "123", + }, + Limit: 0, Offset: 100, } got, err := c.Search(tt.args.ctx, dto)