From 0556882f4efc97bcb78e99afa003e9d136b14545 Mon Sep 17 00:00:00 2001 From: Ziver Koc Date: Mon, 24 May 2021 23:53:29 +0200 Subject: [PATCH] Some progress on symbol config page --- .../se/koc/trader/api/ExchangeMarket.java | 10 ++++++-- .../koc/trader/endpoint/ExchangeEndpoint.java | 4 +-- .../exchange/binance/BinanceMarket.java | 20 ++++++++++++--- .../se/koc/trader/page/SymbolConfigPage.java | 25 ++++++------------- src/main/resources/web/symbol_config.tmpl | 22 ++++++++++++---- 5 files changed, 52 insertions(+), 29 deletions(-) diff --git a/src/main/java/se/koc/trader/api/ExchangeMarket.java b/src/main/java/se/koc/trader/api/ExchangeMarket.java index 30671a7..2384115 100644 --- a/src/main/java/se/koc/trader/api/ExchangeMarket.java +++ b/src/main/java/se/koc/trader/api/ExchangeMarket.java @@ -7,7 +7,13 @@ import java.util.List; public interface ExchangeMarket { /** - * @return a List of all symbols supported by this exchange, symbols are defined by "{baseAsset}/{quoteAsset}" + * @return a List of all symbol names that are supported by this exchange, symbols are defined by "{baseAsset}/{quoteAsset}" */ - List getSymbols(); + List getSymbols(); + + /** + * @param name one of the names provided by the {@link #getSymbol(String)} method. + * @return new Symbol instance representing the given symbol name on the exchange. + */ + Symbol getSymbol(String name); } diff --git a/src/main/java/se/koc/trader/endpoint/ExchangeEndpoint.java b/src/main/java/se/koc/trader/endpoint/ExchangeEndpoint.java index fbb66c3..2b92d05 100644 --- a/src/main/java/se/koc/trader/endpoint/ExchangeEndpoint.java +++ b/src/main/java/se/koc/trader/endpoint/ExchangeEndpoint.java @@ -21,8 +21,8 @@ public class ExchangeEndpoint implements WSInterface { Exchange exchange = Exchange.getExchange(db, exchangeId); DataNode symbols = root.set("symbols", DataNode.DataType.List); - for (Symbol symbol : exchange.getObject().getExchangeMarket().getSymbols()) { - symbols.add(symbol.getName()); + for (String symbolName : exchange.getObject().getExchangeMarket().getSymbols()) { + symbols.add(symbolName); } return root; diff --git a/src/main/java/se/koc/trader/exchange/binance/BinanceMarket.java b/src/main/java/se/koc/trader/exchange/binance/BinanceMarket.java index 3f49fe6..be06ab3 100644 --- a/src/main/java/se/koc/trader/exchange/binance/BinanceMarket.java +++ b/src/main/java/se/koc/trader/exchange/binance/BinanceMarket.java @@ -3,14 +3,18 @@ package se.koc.trader.exchange.binance; import se.koc.trader.api.ExchangeMarket; import se.koc.trader.struct.Symbol; import zutil.net.ws.rest.RESTClientFactory; +import zutil.parser.DataNode; import java.net.MalformedURLException; import java.net.URL; +import java.util.ArrayList; import java.util.List; public class BinanceMarket implements ExchangeMarket { - private BinanceRestAPI rest; + private transient BinanceRestAPI rest; + + private transient List symbolsCache; public BinanceMarket() { @@ -27,10 +31,20 @@ public class BinanceMarket implements ExchangeMarket { } @Override - public List getSymbols() { - return null; // /api/v3/ticker/price + public List getSymbols() { + if (symbolsCache == null) { + symbolsCache = new ArrayList<>(); + DataNode symbols = rest.getExchangeInfo().get("symbols"); + + for (DataNode symbol : symbols) { + symbolsCache.add(symbol.getString("symbol")); + } + } + + return symbolsCache; } + @Override public Symbol getSymbol(String symbol) { return null; // /api/v3/ticker/price?symbol=xxx } diff --git a/src/main/java/se/koc/trader/page/SymbolConfigPage.java b/src/main/java/se/koc/trader/page/SymbolConfigPage.java index 24dc8b3..8fd339e 100644 --- a/src/main/java/se/koc/trader/page/SymbolConfigPage.java +++ b/src/main/java/se/koc/trader/page/SymbolConfigPage.java @@ -10,6 +10,7 @@ import zutil.io.file.FileUtil; import zutil.log.LogUtil; import zutil.parser.Templator; +import java.util.List; import java.util.Map; import java.util.logging.Logger; @@ -37,7 +38,9 @@ public class SymbolConfigPage extends TraderPage { // Save new input if (request.containsKey("action")) { + int exchangeId = (ObjectUtil.isEmpty(request.get("exchange-id")) ? -1 : Integer.parseInt(request.get("exchange-id"))); int id = (ObjectUtil.isEmpty(request.get("id")) ? -1 : Integer.parseInt(request.get("id"))); + Exchange exchange = Exchange.getExchange(db, exchangeId); Symbol symbol = null; if (id >= 0) @@ -46,22 +49,11 @@ public class SymbolConfigPage extends TraderPage { switch(request.get("action")) { case "create_symbol": logger.info("Creating symbol: " + request.get("name")); - symbol = new Symbol(); - /* FALLTHROUGH */ - case "modify_symbol": - if (symbol != null) { - logger.info("Modifying sensor: " + symbol.getName()); - symbol.setName(request.get("name")); - symbol.save(db); + symbol = exchange.getObject().getExchangeMarket().getSymbol(request.get("symbol-name")); + symbol.save(db); - TraderContext.getMessageManager().add(new UserMessage( - MessageLevel.SUCCESS, "Successfully saved symbol: " + symbol.getName(), MessageTTL.ONE_VIEW)); - } else { - logger.warning("Unknown sensor id: " + id); - TraderContext.getMessageManager().add(new UserMessage( - MessageLevel.ERROR, "Unknown sensor id: " + id, MessageTTL.ONE_VIEW)); - } - break; + TraderContext.getMessageManager().add(new UserMessage( + MessageLevel.SUCCESS, "Successfully saved symbol: " + symbol.getName(), MessageTTL.ONE_VIEW)); case "remove_symbol": if (symbol != null) { @@ -81,11 +73,10 @@ public class SymbolConfigPage extends TraderPage { // Output Templator tmpl = new Templator(FileUtil.find(TEMPLATE)); - tmpl.set("exchanges", Exchange.getExchanges(db)); tmpl.set("symbols", Symbol.getSymbols(db)); + tmpl.set("exchanges", Exchange.getExchanges(db)); return tmpl; } - } diff --git a/src/main/resources/web/symbol_config.tmpl b/src/main/resources/web/symbol_config.tmpl index a287979..2a4b955 100644 --- a/src/main/resources/web/symbol_config.tmpl +++ b/src/main/resources/web/symbol_config.tmpl @@ -63,11 +63,23 @@ @@ -85,8 +97,8 @@
- - {{#exchanges}} @@ -95,8 +107,8 @@
- -