From 04e0cbad83c6af445d78d1c553537424a105b298 Mon Sep 17 00:00:00 2001 From: wqqqqqq Date: Tue, 30 Dec 2025 23:25:08 +0800 Subject: [PATCH] feat: implement coinank free base coin interface (#1293) - implement coinank free base coin interface in coinank_api.BaseCoinSymbols --- provider/coinank/coinank_api/base_coin.go | 50 +++++++++++++++++++ .../coinank/coinank_api/base_coin_test.go | 43 ++++++++++++++++ 2 files changed, 93 insertions(+) create mode 100644 provider/coinank/coinank_api/base_coin.go create mode 100644 provider/coinank/coinank_api/base_coin_test.go diff --git a/provider/coinank/coinank_api/base_coin.go b/provider/coinank/coinank_api/base_coin.go new file mode 100644 index 00000000..2316f031 --- /dev/null +++ b/provider/coinank/coinank_api/base_coin.go @@ -0,0 +1,50 @@ +package coinank_api + +import ( + "context" + "encoding/json" + "nofx/provider/coinank" + "nofx/provider/coinank/coinank_enum" +) + +// BaseCoinSymbols get base coin from coinank free open api , all params is optional +func BaseCoinSymbols(ctx context.Context, exchangeName coinank_enum.Exchange, symbol string, baseCoin string) ([]BaseCoinResponse, error) { + paramsMap := make(map[string]string, 3) + if symbol != "" { + paramsMap["symbol"] = symbol + } + if baseCoin != "" { + paramsMap["baseCoin"] = baseCoin + } + if exchangeName != "" { + paramsMap["exchangeName"] = string(exchangeName) + } + resp, err := get(ctx, "/api/baseCoin/symbols/open", paramsMap) + if err != nil { + return nil, err + } + var result coinank.CoinankResponse[[]BaseCoinResponse] + err = json.Unmarshal([]byte(resp), &result) + if err != nil { + return nil, err + } + if !result.Success { + return nil, coinank.HttpError + } + return result.Data, nil +} + +type BaseCoinResponse struct { + Symbol string `json:"symbol"` + BaseCoin string `json:"baseCoin"` + ExchangeName string `json:"exchangeName"` + ProductType string `json:"productType"` + SymbolType string `json:"symbolType"` + PricePrecision string `json:"pricePrecision"` + DeliveryType string `json:"deliveryType"` + ExpireAt int `json:"expireAt"` + UpdateAt int `json:"updateAt"` + Hot bool `json:"hot"` + Price float64 `json:"price"` + PriceChangeH24 float64 `json:"priceChangeH24"` +} diff --git a/provider/coinank/coinank_api/base_coin_test.go b/provider/coinank/coinank_api/base_coin_test.go new file mode 100644 index 00000000..2249fa89 --- /dev/null +++ b/provider/coinank/coinank_api/base_coin_test.go @@ -0,0 +1,43 @@ +package coinank_api + +import ( + "context" + "encoding/json" + "testing" +) + +func TestBaseCoinSymbolsNoArgs(t *testing.T) { + resp, err := BaseCoinSymbols(context.TODO(), "", "", "") + if err != nil { + t.Error(err) + } + res, err := json.Marshal(resp) + if err != nil { + t.Error(err) + } + t.Logf("%s", res) +} + +func TestBaseCoinSymbolsBTC(t *testing.T) { + resp, err := BaseCoinSymbols(context.TODO(), "", "", "BTC") + if err != nil { + t.Error(err) + } + res, err := json.Marshal(resp) + if err != nil { + t.Error(err) + } + t.Logf("%s", res) +} + +func TestBaseCoinSymbolsBTCUSDT(t *testing.T) { + resp, err := BaseCoinSymbols(context.TODO(), "", "BTCUSDT", "") + if err != nil { + t.Error(err) + } + res, err := json.Marshal(resp) + if err != nil { + t.Error(err) + } + t.Logf("%s", res) +}