From 22972953d079c1bc97a5056831a46447a76525fc Mon Sep 17 00:00:00 2001 From: c9s Date: Mon, 13 Dec 2021 01:11:15 +0800 Subject: [PATCH 1/5] use requestgen to generate the accessor methods --- .../place_order_request_accessors.go | 132 ++++++++++++++++++ pkg/exchange/kucoin/kucoinapi/trade.go | 90 +++--------- 2 files changed, 149 insertions(+), 73 deletions(-) create mode 100644 pkg/exchange/kucoin/kucoinapi/place_order_request_accessors.go diff --git a/pkg/exchange/kucoin/kucoinapi/place_order_request_accessors.go b/pkg/exchange/kucoin/kucoinapi/place_order_request_accessors.go new file mode 100644 index 000000000..8116b9c88 --- /dev/null +++ b/pkg/exchange/kucoin/kucoinapi/place_order_request_accessors.go @@ -0,0 +1,132 @@ +// Code generated by "requestgen -type PlaceOrderRequest"; DO NOT EDIT. + +package kucoinapi + +import ( + "fmt" + "net/url" +) + +func (p *PlaceOrderRequest) ClientOrderID(clientOrderID string) *PlaceOrderRequest { + p.clientOrderID = &clientOrderID + return p +} + +func (p *PlaceOrderRequest) Symbol(symbol string) *PlaceOrderRequest { + p.symbol = symbol + return p +} + +func (p *PlaceOrderRequest) Tag(tag string) *PlaceOrderRequest { + p.tag = &tag + return p +} + +func (p *PlaceOrderRequest) Side(side SideType) *PlaceOrderRequest { + p.side = side + return p +} + +func (p *PlaceOrderRequest) OrdType(ordType OrderType) *PlaceOrderRequest { + p.ordType = ordType + return p +} + +func (p *PlaceOrderRequest) Size(size string) *PlaceOrderRequest { + p.size = size + return p +} + +func (p *PlaceOrderRequest) Price(price string) *PlaceOrderRequest { + p.price = &price + return p +} + +func (p *PlaceOrderRequest) TimeInForce(timeInForce TimeInForceType) *PlaceOrderRequest { + p.timeInForce = &timeInForce + return p +} + +func (p *PlaceOrderRequest) getParameters() (map[string]interface{}, error) { + var params = map[string]interface{}{} + + // check clientOrderID field -> json key clientOid + if p.clientOrderID != nil { + clientOrderID := *p.clientOrderID + + if len(clientOrderID) == 0 { + return params, fmt.Errorf("clientOid is required, empty string given") + } + + params["clientOid"] = clientOrderID + } + + // check symbol field -> json key symbol + symbol := p.symbol + + if len(symbol) == 0 { + return params, fmt.Errorf("symbol is required, empty string given") + } + + params["symbol"] = symbol + + // check tag field -> json key tag + if p.tag != nil { + tag := *p.tag + + params["tag"] = tag + } + + // check side field -> json key side + side := p.side + + params["side"] = side + + // check ordType field -> json key ordType + ordType := p.ordType + + params["ordType"] = ordType + + // check size field -> json key size + size := p.size + + if len(size) == 0 { + return params, fmt.Errorf("size is required, empty string given") + } + + params["size"] = size + + // check price field -> json key price + if p.price != nil { + price := *p.price + + params["price"] = price + } + + // check timeInForce field -> json key timeInForce + if p.timeInForce != nil { + timeInForce := *p.timeInForce + + if len(timeInForce) == 0 { + return params, fmt.Errorf("timeInForce is required, empty string given") + } + + params["timeInForce"] = timeInForce + } + return params, nil +} + +func (p *PlaceOrderRequest) getQuery() (url.Values, error) { + query := url.Values{} + + params, err := p.getParameters() + if err != nil { + return query, err + } + + for k, v := range params { + query.Add(k, fmt.Sprintf("%v", v)) + } + + return query, nil +} diff --git a/pkg/exchange/kucoin/kucoinapi/trade.go b/pkg/exchange/kucoin/kucoinapi/trade.go index 20ad4ed7c..13473f0de 100644 --- a/pkg/exchange/kucoin/kucoinapi/trade.go +++ b/pkg/exchange/kucoin/kucoinapi/trade.go @@ -186,93 +186,29 @@ func (c *TradeService) NewListOrdersRequest() *ListOrdersRequest { return &ListOrdersRequest{client: c.client} } +//go:generate requestgen -type PlaceOrderRequest type PlaceOrderRequest struct { client *RestClient // A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. - clientOrderID *string + clientOrderID *string `param:"clientOid,required"` - symbol string + symbol string `param:"symbol,required"` // A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 8 characters. - tag *string + tag *string `param:"tag"` // "buy" or "sell" - side SideType + side SideType `param:"side"` - ordType OrderType + ordType OrderType `param:"ordType"` // limit order parameters - size string + size string `param:"size,required"` - price *string + price *string `param:"price"` - timeInForce *TimeInForceType -} - -func (r *PlaceOrderRequest) Symbol(symbol string) *PlaceOrderRequest { - r.symbol = symbol - return r -} - -func (r *PlaceOrderRequest) ClientOrderID(clientOrderID string) *PlaceOrderRequest { - r.clientOrderID = &clientOrderID - return r -} - -func (r *PlaceOrderRequest) Side(side SideType) *PlaceOrderRequest { - r.side = side - return r -} - -func (r *PlaceOrderRequest) Size(size string) *PlaceOrderRequest { - r.size = size - return r -} - -func (r *PlaceOrderRequest) Price(price string) *PlaceOrderRequest { - r.price = &price - return r -} - -func (r *PlaceOrderRequest) TimeInForce(timeInForce TimeInForceType) *PlaceOrderRequest { - r.timeInForce = &timeInForce - return r -} - -func (r *PlaceOrderRequest) OrderType(orderType OrderType) *PlaceOrderRequest { - r.ordType = orderType - return r -} - -func (r *PlaceOrderRequest) getParameters() (map[string]interface{}, error) { - payload := map[string]interface{}{} - - payload["symbol"] = r.symbol - - if r.clientOrderID != nil { - payload["clientOid"] = r.clientOrderID - } else { - payload["clientOid"] = uuid.New().String() - } - - if len(r.side) == 0 { - return nil, errors.New("order side is required") - } - - payload["side"] = r.side - payload["type"] = r.ordType - payload["size"] = r.size - - if r.price != nil { - payload["price"] = r.price - } - - if r.timeInForce != nil { - payload["timeInForce"] = r.timeInForce - } - - return payload, nil + timeInForce *TimeInForceType `param:"timeInForce,required"` } func (r *PlaceOrderRequest) Do(ctx context.Context) (*OrderResponse, error) { @@ -281,6 +217,10 @@ func (r *PlaceOrderRequest) Do(ctx context.Context) (*OrderResponse, error) { return nil, err } + if _, ok := payload["clientOid"] ; !ok { + payload["clientOid"] = uuid.New().String() + } + req, err := r.client.newAuthenticatedRequest("POST", "/api/v1/orders", nil, payload) if err != nil { return nil, err @@ -441,6 +381,10 @@ func (r *BatchPlaceOrderRequest) Do(ctx context.Context) ([]OrderResponse, error return nil, err } + if _, ok := params["clientOid"] ; !ok { + params["clientOid"] = uuid.New().String() + } + orderList = append(orderList, params) } From b9dfc27df637b64dc4690ba7abfc4b23900f44c5 Mon Sep 17 00:00:00 2001 From: c9s Date: Mon, 13 Dec 2021 01:12:04 +0800 Subject: [PATCH 2/5] ignore .env.production --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index efa134118..2720e291f 100644 --- a/.gitignore +++ b/.gitignore @@ -22,6 +22,7 @@ /.env.local /.env.*.local +/.env.production .DS_Store From 97b63f45d519b0dafeac8aabfba15fc0ea272930 Mon Sep 17 00:00:00 2001 From: c9s Date: Mon, 13 Dec 2021 01:14:52 +0800 Subject: [PATCH 3/5] kucoin: rename receiver to r --- .../place_order_request_accessors.go | 78 +++++++++---------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/pkg/exchange/kucoin/kucoinapi/place_order_request_accessors.go b/pkg/exchange/kucoin/kucoinapi/place_order_request_accessors.go index 8116b9c88..28aa0ab8a 100644 --- a/pkg/exchange/kucoin/kucoinapi/place_order_request_accessors.go +++ b/pkg/exchange/kucoin/kucoinapi/place_order_request_accessors.go @@ -7,52 +7,52 @@ import ( "net/url" ) -func (p *PlaceOrderRequest) ClientOrderID(clientOrderID string) *PlaceOrderRequest { - p.clientOrderID = &clientOrderID - return p +func (r *PlaceOrderRequest) ClientOrderID(clientOrderID string) *PlaceOrderRequest { + r.clientOrderID = &clientOrderID + return r } -func (p *PlaceOrderRequest) Symbol(symbol string) *PlaceOrderRequest { - p.symbol = symbol - return p +func (r *PlaceOrderRequest) Symbol(symbol string) *PlaceOrderRequest { + r.symbol = symbol + return r } -func (p *PlaceOrderRequest) Tag(tag string) *PlaceOrderRequest { - p.tag = &tag - return p +func (r *PlaceOrderRequest) Tag(tag string) *PlaceOrderRequest { + r.tag = &tag + return r } -func (p *PlaceOrderRequest) Side(side SideType) *PlaceOrderRequest { - p.side = side - return p +func (r *PlaceOrderRequest) Side(side SideType) *PlaceOrderRequest { + r.side = side + return r } -func (p *PlaceOrderRequest) OrdType(ordType OrderType) *PlaceOrderRequest { - p.ordType = ordType - return p +func (r *PlaceOrderRequest) OrdType(ordType OrderType) *PlaceOrderRequest { + r.ordType = ordType + return r } -func (p *PlaceOrderRequest) Size(size string) *PlaceOrderRequest { - p.size = size - return p +func (r *PlaceOrderRequest) Size(size string) *PlaceOrderRequest { + r.size = size + return r } -func (p *PlaceOrderRequest) Price(price string) *PlaceOrderRequest { - p.price = &price - return p +func (r *PlaceOrderRequest) Price(price string) *PlaceOrderRequest { + r.price = &price + return r } -func (p *PlaceOrderRequest) TimeInForce(timeInForce TimeInForceType) *PlaceOrderRequest { - p.timeInForce = &timeInForce - return p +func (r *PlaceOrderRequest) TimeInForce(timeInForce TimeInForceType) *PlaceOrderRequest { + r.timeInForce = &timeInForce + return r } -func (p *PlaceOrderRequest) getParameters() (map[string]interface{}, error) { +func (r *PlaceOrderRequest) getParameters() (map[string]interface{}, error) { var params = map[string]interface{}{} // check clientOrderID field -> json key clientOid - if p.clientOrderID != nil { - clientOrderID := *p.clientOrderID + if r.clientOrderID != nil { + clientOrderID := *r.clientOrderID if len(clientOrderID) == 0 { return params, fmt.Errorf("clientOid is required, empty string given") @@ -62,7 +62,7 @@ func (p *PlaceOrderRequest) getParameters() (map[string]interface{}, error) { } // check symbol field -> json key symbol - symbol := p.symbol + symbol := r.symbol if len(symbol) == 0 { return params, fmt.Errorf("symbol is required, empty string given") @@ -71,24 +71,24 @@ func (p *PlaceOrderRequest) getParameters() (map[string]interface{}, error) { params["symbol"] = symbol // check tag field -> json key tag - if p.tag != nil { - tag := *p.tag + if r.tag != nil { + tag := *r.tag params["tag"] = tag } // check side field -> json key side - side := p.side + side := r.side params["side"] = side // check ordType field -> json key ordType - ordType := p.ordType + ordType := r.ordType params["ordType"] = ordType // check size field -> json key size - size := p.size + size := r.size if len(size) == 0 { return params, fmt.Errorf("size is required, empty string given") @@ -97,15 +97,15 @@ func (p *PlaceOrderRequest) getParameters() (map[string]interface{}, error) { params["size"] = size // check price field -> json key price - if p.price != nil { - price := *p.price + if r.price != nil { + price := *r.price params["price"] = price } // check timeInForce field -> json key timeInForce - if p.timeInForce != nil { - timeInForce := *p.timeInForce + if r.timeInForce != nil { + timeInForce := *r.timeInForce if len(timeInForce) == 0 { return params, fmt.Errorf("timeInForce is required, empty string given") @@ -116,10 +116,10 @@ func (p *PlaceOrderRequest) getParameters() (map[string]interface{}, error) { return params, nil } -func (p *PlaceOrderRequest) getQuery() (url.Values, error) { +func (r *PlaceOrderRequest) getQuery() (url.Values, error) { query := url.Values{} - params, err := p.getParameters() + params, err := r.getParameters() if err != nil { return query, err } From c28833fba08b643fc9e6e5f4d517d9aad3739961 Mon Sep 17 00:00:00 2001 From: c9s Date: Mon, 13 Dec 2021 01:53:00 +0800 Subject: [PATCH 4/5] kucoinapi: use requestgen for list orders request --- .../list_orders_request_accessors.go | 141 ++++++++++++++++++ .../place_order_request_accessors.go | 14 +- pkg/exchange/kucoin/kucoinapi/trade.go | 80 ++-------- 3 files changed, 166 insertions(+), 69 deletions(-) create mode 100644 pkg/exchange/kucoin/kucoinapi/list_orders_request_accessors.go diff --git a/pkg/exchange/kucoin/kucoinapi/list_orders_request_accessors.go b/pkg/exchange/kucoin/kucoinapi/list_orders_request_accessors.go new file mode 100644 index 000000000..b1e5ae765 --- /dev/null +++ b/pkg/exchange/kucoin/kucoinapi/list_orders_request_accessors.go @@ -0,0 +1,141 @@ +// Code generated by "requestgen -type ListOrdersRequest"; DO NOT EDIT. + +package kucoinapi + +import ( + "fmt" + "net/url" + "strconv" + "time" +) + +func (r *ListOrdersRequest) Status(status string) *ListOrdersRequest { + r.status = &status + return r +} + +func (r *ListOrdersRequest) Symbol(symbol string) *ListOrdersRequest { + r.symbol = &symbol + return r +} + +func (r *ListOrdersRequest) Side(side SideType) *ListOrdersRequest { + r.side = &side + return r +} + +func (r *ListOrdersRequest) OrderType(orderType OrderType) *ListOrdersRequest { + r.orderType = &orderType + return r +} + +func (r *ListOrdersRequest) TradeType(tradeType TradeType) *ListOrdersRequest { + r.tradeType = &tradeType + return r +} + +func (r *ListOrdersRequest) StartAt(startAt time.Time) *ListOrdersRequest { + r.startAt = &startAt + return r +} + +func (r *ListOrdersRequest) EndAt(endAt time.Time) *ListOrdersRequest { + r.endAt = &endAt + return r +} + +func (r *ListOrdersRequest) getParameters() (map[string]interface{}, error) { + var params = map[string]interface{}{} + + // check status field -> json key status + if r.status != nil { + status := *r.status + + switch status { + case "active", "done": + params["status"] = status + + default: + return params, fmt.Errorf("status value %v is invalid", status) + + } + + params["status"] = status + } else { + } + + // check symbol field -> json key symbol + if r.symbol != nil { + symbol := *r.symbol + + params["symbol"] = symbol + } else { + } + + // check side field -> json key side + if r.side != nil { + side := *r.side + + switch side { + case "buy", "sell": + params["side"] = side + + default: + return params, fmt.Errorf("side value %v is invalid", side) + + } + + params["side"] = side + } else { + } + + // check orderType field -> json key type + if r.orderType != nil { + orderType := *r.orderType + + params["type"] = orderType + } else { + } + + // check tradeType field -> json key tradeType + if r.tradeType != nil { + tradeType := *r.tradeType + + params["tradeType"] = tradeType + } else { + } + + // check startAt field -> json key startAt + if r.startAt != nil { + startAt := *r.startAt + + // convert time.Time to milliseconds time + params["startAt"] = strconv.FormatInt(startAt.UnixNano()/int64(time.Millisecond), 10) + } else { + } + + // check endAt field -> json key endAt + if r.endAt != nil { + endAt := *r.endAt + + // convert time.Time to milliseconds time + params["endAt"] = strconv.FormatInt(endAt.UnixNano()/int64(time.Millisecond), 10) + } else { + } + return params, nil +} + +func (r *ListOrdersRequest) getQuery() (url.Values, error) { + query := url.Values{} + + params, err := r.getParameters() + if err != nil { + return query, err + } + + for k, v := range params { + query.Add(k, fmt.Sprintf("%v", v)) + } + + return query, nil +} diff --git a/pkg/exchange/kucoin/kucoinapi/place_order_request_accessors.go b/pkg/exchange/kucoin/kucoinapi/place_order_request_accessors.go index 28aa0ab8a..cdeb3cadb 100644 --- a/pkg/exchange/kucoin/kucoinapi/place_order_request_accessors.go +++ b/pkg/exchange/kucoin/kucoinapi/place_order_request_accessors.go @@ -27,8 +27,8 @@ func (r *PlaceOrderRequest) Side(side SideType) *PlaceOrderRequest { return r } -func (r *PlaceOrderRequest) OrdType(ordType OrderType) *PlaceOrderRequest { - r.ordType = ordType +func (r *PlaceOrderRequest) OrderType(orderType OrderType) *PlaceOrderRequest { + r.orderType = orderType return r } @@ -59,6 +59,7 @@ func (r *PlaceOrderRequest) getParameters() (map[string]interface{}, error) { } params["clientOid"] = clientOrderID + } else { } // check symbol field -> json key symbol @@ -75,6 +76,7 @@ func (r *PlaceOrderRequest) getParameters() (map[string]interface{}, error) { tag := *r.tag params["tag"] = tag + } else { } // check side field -> json key side @@ -82,10 +84,10 @@ func (r *PlaceOrderRequest) getParameters() (map[string]interface{}, error) { params["side"] = side - // check ordType field -> json key ordType - ordType := r.ordType + // check orderType field -> json key ordType + orderType := r.orderType - params["ordType"] = ordType + params["ordType"] = orderType // check size field -> json key size size := r.size @@ -101,6 +103,7 @@ func (r *PlaceOrderRequest) getParameters() (map[string]interface{}, error) { price := *r.price params["price"] = price + } else { } // check timeInForce field -> json key timeInForce @@ -112,6 +115,7 @@ func (r *PlaceOrderRequest) getParameters() (map[string]interface{}, error) { } params["timeInForce"] = timeInForce + } else { } return params, nil } diff --git a/pkg/exchange/kucoin/kucoinapi/trade.go b/pkg/exchange/kucoin/kucoinapi/trade.go index 13473f0de..cc55ffd93 100644 --- a/pkg/exchange/kucoin/kucoinapi/trade.go +++ b/pkg/exchange/kucoin/kucoinapi/trade.go @@ -2,8 +2,6 @@ package kucoinapi import ( "context" - "net/url" - "strconv" "time" "github.com/c9s/bbgo/pkg/fixedpoint" @@ -44,46 +42,23 @@ func (c *TradeService) NewCancelAllOrderRequest() *CancelAllOrderRequest { } } +//go:generate requestgen -type ListOrdersRequest type ListOrdersRequest struct { client *RestClient - status *string + status *string `param:"status" validValues:"active,done"` - symbol *string + symbol *string `param:"symbol"` - side *SideType + side *SideType `param:"side" validValues:"buy,sell"` - orderType *OrderType + orderType *OrderType `param:"type"` - tradeType *TradeType + tradeType *TradeType `param:"tradeType"` - startAt *time.Time + startAt *time.Time `param:"startAt,milliseconds"` - endAt *time.Time -} - -func (r *ListOrdersRequest) Status(status string) { - r.status = &status -} - -func (r *ListOrdersRequest) Symbol(symbol string) { - r.symbol = &symbol -} - -func (r *ListOrdersRequest) Side(side SideType) { - r.side = &side -} - -func (r *ListOrdersRequest) OrderType(orderType OrderType) { - r.orderType = &orderType -} - -func (r *ListOrdersRequest) StartAt(startAt time.Time) { - r.startAt = &startAt -} - -func (r *ListOrdersRequest) EndAt(endAt time.Time) { - r.endAt = &endAt + endAt *time.Time `param:"endAt,milliseconds"` } type Order struct { @@ -123,36 +98,13 @@ type OrderListPage struct { } func (r *ListOrdersRequest) Do(ctx context.Context) (*OrderListPage, error) { - var params = url.Values{} - - if r.status != nil { - params["status"] = []string{*r.status} + params, err := r.getQuery() + if err != nil { + return nil, err } - if r.symbol != nil { - params["symbol"] = []string{*r.symbol} - } - - if r.side != nil { - params["side"] = []string{string(*r.side)} - } - - if r.orderType != nil { - params["type"] = []string{string(*r.orderType)} - } - - if r.tradeType != nil { - params["tradeType"] = []string{string(*r.tradeType)} - } else { - params["tradeType"] = []string{"TRADE"} - } - - if r.startAt != nil { - params["startAt"] = []string{strconv.FormatInt(r.startAt.UnixNano()/int64(time.Millisecond), 10)} - } - - if r.endAt != nil { - params["endAt"] = []string{strconv.FormatInt(r.endAt.UnixNano()/int64(time.Millisecond), 10)} + if !params.Has("tradeType") { + params.Add("tradeType", "TRADE") } req, err := r.client.newAuthenticatedRequest("GET", "/api/v1/orders", params, nil) @@ -201,7 +153,7 @@ type PlaceOrderRequest struct { // "buy" or "sell" side SideType `param:"side"` - ordType OrderType `param:"ordType"` + orderType OrderType `param:"ordType"` // limit order parameters size string `param:"size,required"` @@ -217,7 +169,7 @@ func (r *PlaceOrderRequest) Do(ctx context.Context) (*OrderResponse, error) { return nil, err } - if _, ok := payload["clientOid"] ; !ok { + if _, ok := payload["clientOid"]; !ok { payload["clientOid"] = uuid.New().String() } @@ -381,7 +333,7 @@ func (r *BatchPlaceOrderRequest) Do(ctx context.Context) ([]OrderResponse, error return nil, err } - if _, ok := params["clientOid"] ; !ok { + if _, ok := params["clientOid"]; !ok { params["clientOid"] = uuid.New().String() } From 34c2b342baa7f98ac45c0862ad4638370c14b39f Mon Sep 17 00:00:00 2001 From: c9s Date: Mon, 13 Dec 2021 02:08:18 +0800 Subject: [PATCH 5/5] apply requestgen for CancelOrderRequest and CancelAllOrderRequest --- .../cancel_all_order_request_accessors.go | 54 +++++++++++++++++++ .../cancel_order_request_accessors.go | 54 +++++++++++++++++++ .../place_order_request_accessors.go | 4 ++ pkg/exchange/kucoin/kucoinapi/trade.go | 39 +++++--------- 4 files changed, 125 insertions(+), 26 deletions(-) create mode 100644 pkg/exchange/kucoin/kucoinapi/cancel_all_order_request_accessors.go create mode 100644 pkg/exchange/kucoin/kucoinapi/cancel_order_request_accessors.go diff --git a/pkg/exchange/kucoin/kucoinapi/cancel_all_order_request_accessors.go b/pkg/exchange/kucoin/kucoinapi/cancel_all_order_request_accessors.go new file mode 100644 index 000000000..5be06ca82 --- /dev/null +++ b/pkg/exchange/kucoin/kucoinapi/cancel_all_order_request_accessors.go @@ -0,0 +1,54 @@ +// Code generated by "requestgen -type CancelAllOrderRequest"; DO NOT EDIT. + +package kucoinapi + +import ( + "fmt" + "net/url" +) + +func (r *CancelAllOrderRequest) Symbol(symbol string) *CancelAllOrderRequest { + r.symbol = &symbol + return r +} + +func (r *CancelAllOrderRequest) TradeType(tradeType string) *CancelAllOrderRequest { + r.tradeType = &tradeType + return r +} + +func (r *CancelAllOrderRequest) getParameters() (map[string]interface{}, error) { + var params = map[string]interface{}{} + + // check symbol field -> json key symbol + if r.symbol != nil { + symbol := *r.symbol + + params["symbol"] = symbol + } else { + } + + // check tradeType field -> json key tradeType + if r.tradeType != nil { + tradeType := *r.tradeType + + params["tradeType"] = tradeType + } else { + } + return params, nil +} + +func (r *CancelAllOrderRequest) getQuery() (url.Values, error) { + query := url.Values{} + + params, err := r.getParameters() + if err != nil { + return query, err + } + + for k, v := range params { + query.Add(k, fmt.Sprintf("%v", v)) + } + + return query, nil +} diff --git a/pkg/exchange/kucoin/kucoinapi/cancel_order_request_accessors.go b/pkg/exchange/kucoin/kucoinapi/cancel_order_request_accessors.go new file mode 100644 index 000000000..5865dad21 --- /dev/null +++ b/pkg/exchange/kucoin/kucoinapi/cancel_order_request_accessors.go @@ -0,0 +1,54 @@ +// Code generated by "requestgen -type CancelOrderRequest"; DO NOT EDIT. + +package kucoinapi + +import ( + "fmt" + "net/url" +) + +func (c *CancelOrderRequest) OrderID(orderID string) *CancelOrderRequest { + c.orderID = &orderID + return c +} + +func (c *CancelOrderRequest) ClientOrderID(clientOrderID string) *CancelOrderRequest { + c.clientOrderID = &clientOrderID + return c +} + +func (c *CancelOrderRequest) getParameters() (map[string]interface{}, error) { + var params = map[string]interface{}{} + + // check orderID field -> json key orderID + if c.orderID != nil { + orderID := *c.orderID + + params["orderID"] = orderID + } else { + } + + // check clientOrderID field -> json key clientOrderID + if c.clientOrderID != nil { + clientOrderID := *c.clientOrderID + + params["clientOrderID"] = clientOrderID + } else { + } + return params, nil +} + +func (c *CancelOrderRequest) getQuery() (url.Values, error) { + query := url.Values{} + + params, err := c.getParameters() + if err != nil { + return query, err + } + + for k, v := range params { + query.Add(k, fmt.Sprintf("%v", v)) + } + + return query, nil +} diff --git a/pkg/exchange/kucoin/kucoinapi/place_order_request_accessors.go b/pkg/exchange/kucoin/kucoinapi/place_order_request_accessors.go index cdeb3cadb..04be6f89d 100644 --- a/pkg/exchange/kucoin/kucoinapi/place_order_request_accessors.go +++ b/pkg/exchange/kucoin/kucoinapi/place_order_request_accessors.go @@ -4,6 +4,7 @@ package kucoinapi import ( "fmt" + "github.com/google/uuid" "net/url" ) @@ -60,6 +61,9 @@ func (r *PlaceOrderRequest) getParameters() (map[string]interface{}, error) { params["clientOid"] = clientOrderID } else { + clientOrderID := uuid.New().String() + + params["clientOid"] = clientOrderID } // check symbol field -> json key symbol diff --git a/pkg/exchange/kucoin/kucoinapi/trade.go b/pkg/exchange/kucoin/kucoinapi/trade.go index cc55ffd93..5a50c11a6 100644 --- a/pkg/exchange/kucoin/kucoinapi/trade.go +++ b/pkg/exchange/kucoin/kucoinapi/trade.go @@ -143,7 +143,7 @@ type PlaceOrderRequest struct { client *RestClient // A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. - clientOrderID *string `param:"clientOid,required"` + clientOrderID *string `param:"clientOid,required" defaultValuer:"uuid()"` symbol string `param:"symbol,required"` @@ -169,10 +169,6 @@ func (r *PlaceOrderRequest) Do(ctx context.Context) (*OrderResponse, error) { return nil, err } - if _, ok := payload["clientOid"]; !ok { - payload["clientOid"] = uuid.New().String() - } - req, err := r.client.newAuthenticatedRequest("POST", "/api/v1/orders", nil, payload) if err != nil { return nil, err @@ -200,21 +196,12 @@ func (r *PlaceOrderRequest) Do(ctx context.Context) (*OrderResponse, error) { return orderResponse.Data, nil } +//go:generate requestgen -type CancelOrderRequest type CancelOrderRequest struct { client *RestClient - orderID *string - clientOrderID *string -} - -func (r *CancelOrderRequest) OrderID(orderID string) *CancelOrderRequest { - r.orderID = &orderID - return r -} - -func (r *CancelOrderRequest) ClientOrderID(clientOrderID string) *CancelOrderRequest { - r.clientOrderID = &clientOrderID - return r + orderID *string `param:"orderID"` + clientOrderID *string `param:"clientOrderID"` } type CancelOrderResponse struct { @@ -264,21 +251,21 @@ func (r *CancelOrderRequest) Do(ctx context.Context) (*CancelOrderResponse, erro return apiResponse.Data, nil } +//go:generate requestgen -type CancelAllOrderRequest type CancelAllOrderRequest struct { client *RestClient - symbol *string - - // tradeType string -} - -func (r *CancelAllOrderRequest) Symbol(symbol string) *CancelAllOrderRequest { - r.symbol = &symbol - return r + symbol *string `param:"symbol"` + tradeType *string `param:"tradeType"` } func (r *CancelAllOrderRequest) Do(ctx context.Context) (*CancelOrderResponse, error) { - req, err := r.client.newAuthenticatedRequest("DELETE", "/api/v1/orders", nil, nil) + params, err := r.getQuery() + if err != nil { + return nil, err + } + + req, err := r.client.newAuthenticatedRequest("DELETE", "/api/v1/orders", params, nil) if err != nil { return nil, err }