From de3ef6afc1a017d7bde317bb4d18a5a8a1b5d9b7 Mon Sep 17 00:00:00 2001 From: reivnn <36535188+reivnn@users.noreply.github.com> Date: Mon, 20 Apr 2020 21:51:55 +0300 Subject: [PATCH] OpenOrders and CancelOrder fixed --- btcturk/client.go | 4 +++ btcturk/user_orders.go | 78 ++++++++++++++++++++++++++---------------- 2 files changed, 53 insertions(+), 29 deletions(-) diff --git a/btcturk/client.go b/btcturk/client.go index 2c1622f..6b7f6a4 100644 --- a/btcturk/client.go +++ b/btcturk/client.go @@ -128,3 +128,7 @@ func (c *Client) clearRequest() { c.params = url.Values{} c.body = nil } + +func (c *Client) Version() string { + return "0.0.1" +} diff --git a/btcturk/user_orders.go b/btcturk/user_orders.go index a1cfd0e..872542d 100644 --- a/btcturk/user_orders.go +++ b/btcturk/user_orders.go @@ -3,7 +3,10 @@ package btcturk import ( "bytes" "encoding/json" + "errors" "fmt" + "io" + "io/ioutil" ) const ( @@ -57,7 +60,7 @@ const ( StopLimitOrder string = "stoplimit" ) -type OpenOrders struct { +type OpenOrderModel struct { ID int32 `json:"id"` Price string `json:"price"` Amount string `json:"amount"` @@ -71,6 +74,11 @@ type OpenOrders struct { Status string `json:"status"` } +type OpenOrderResult struct { + Asks []OpenOrderModel `json:"asks"` + Bids []OpenOrderModel `json:"bids"` +} + type OrderType struct { ID string `json:"id"` DateTime string `json:"datetime"` @@ -89,49 +97,27 @@ type OrderInput struct { PairSymbol string `json:"pairSymbol"` } -func (c *Client) OpenOrders() ([]OpenOrders, error) { +func (c *Client) OpenOrders() ([]OpenOrderResult, error) { jsonString, err := json.Marshal(c.params) if err != nil { - return []OpenOrders{}, err + return []OpenOrderResult{}, err } req, err := c.newRequest("GET", "/api/v1/openOrders", bytes.NewBuffer(jsonString)) if err != nil { - return []OpenOrders{}, err + return []OpenOrderResult{}, err } if err := c.auth(req); err != nil { - return []OpenOrders{}, err + return []OpenOrderResult{}, err } - var response []OpenOrders + var response []OpenOrderResult if _, err = c.do(req, &response); err != nil { - return []OpenOrders{}, err + return []OpenOrderResult{}, err } return response, nil } -func (c *Client) CancelOrder() (bool, error) { - req, err := c.newRequest("DELETE", fmt.Sprintf("/api/v1/order?%s", c.params.Encode()), c.body) - if err != nil { - return false, err - } - if err := c.auth(req); err != nil { - return false, err - } - - var response GeneralResponse - - // TODO : solve - // API returns `"code":""` - // my code expects `"code":0` an integer - // so it will return error - if _, err = c.do(req, &response); err != nil { - return false, err - } - - return response.Success, nil -} - func (c *Client) Buy(o *OrderInput) (OrderType, error) { o.OrderType = "buy" jsonString, err := json.Marshal(o) @@ -177,3 +163,37 @@ func (c *Client) Sell(o *OrderInput) (OrderType, error) { return response, nil } + +func (c *Client) CancelOrder() (bool, error) { + req, err := c.newRequest("DELETE", fmt.Sprintf("/api/v1/order?%s", c.params.Encode()), c.body) + if err != nil { + return false, err + } + if err := c.auth(req); err != nil { + return false, err + } + + resp, err := c.client.Do(req) + if err != nil { + return false, err + } + + defer func() { + io.Copy(ioutil.Discard, resp.Body) + resp.Body.Close() + c.clearRequest() + }() + + var response = &GeneralResponse{} + + if json.NewDecoder(resp.Body).Decode(response) != nil { + return false, err + } + + if response.Success == true { + return true, nil + } else { + return false, errors.New(*response.Message) + } + +}