|
|
|
@ -146,6 +146,33 @@ func (s *Service) GetCoinGraphData(convert, symbol, name string, start, end int6
|
|
|
|
|
return ret, nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// GetExchangeRate gets the current excange rate between two currencies
|
|
|
|
|
func (s *Service) GetExchangeRate(convertFrom string, convertTo string) (float64, error) {
|
|
|
|
|
convertFrom = strings.ToLower(convertFrom)
|
|
|
|
|
convertTo = strings.ToLower(convertTo)
|
|
|
|
|
if convertFrom == convertTo {
|
|
|
|
|
return 1.0, nil
|
|
|
|
|
}
|
|
|
|
|
rates, err := s.client.ExchangeRates()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return 0, err
|
|
|
|
|
}
|
|
|
|
|
if rates == nil {
|
|
|
|
|
return 0, fmt.Errorf("expected rates, received nil")
|
|
|
|
|
}
|
|
|
|
|
// Combined rate is convertFrom->BTC->convertTo
|
|
|
|
|
fromRate, found := (*rates)[convertFrom]
|
|
|
|
|
if !found {
|
|
|
|
|
return 0, fmt.Errorf("unsupported currency conversion: %s", convertFrom)
|
|
|
|
|
}
|
|
|
|
|
toRate, found := (*rates)[convertTo]
|
|
|
|
|
if !found {
|
|
|
|
|
return 0, fmt.Errorf("unsupported currency conversion: %s", convertTo)
|
|
|
|
|
}
|
|
|
|
|
rate := toRate.Value / fromRate.Value
|
|
|
|
|
return rate, nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// GetGlobalMarketGraphData gets global market graph data
|
|
|
|
|
func (s *Service) GetGlobalMarketGraphData(convert string, start int64, end int64) (apitypes.MarketGraph, error) {
|
|
|
|
|
days := strconv.Itoa(util.CalcDays(start, end))
|
|
|
|
@ -160,25 +187,10 @@ func (s *Service) GetGlobalMarketGraphData(convert string, start int64, end int6
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// This API does not appear to support vs_currency and only returns USD, so use ExchangeRates to convert
|
|
|
|
|
rate := 1.0
|
|
|
|
|
if convertTo != "usd" {
|
|
|
|
|
rates, err := s.client.ExchangeRates()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return ret, err
|
|
|
|
|
}
|
|
|
|
|
if rates == nil {
|
|
|
|
|
return ret, fmt.Errorf("expected rates, received nil")
|
|
|
|
|
}
|
|
|
|
|
// Combined rate is USD->BTC->other
|
|
|
|
|
btcRate, found := (*rates)[convertTo]
|
|
|
|
|
if !found {
|
|
|
|
|
return ret, fmt.Errorf("unsupported currency conversion: %s", convertTo)
|
|
|
|
|
}
|
|
|
|
|
usdRate, found := (*rates)["usd"]
|
|
|
|
|
if !found {
|
|
|
|
|
return ret, fmt.Errorf("unsupported currency conversion: usd")
|
|
|
|
|
}
|
|
|
|
|
rate = btcRate.Value / usdRate.Value
|
|
|
|
|
// TODO: watch out - this is not cached, so we hit the backend every time!
|
|
|
|
|
rate, err := s.GetExchangeRate("usd", convertTo)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return ret, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var marketCapUSD [][]float64
|
|
|
|
|