From d7fa192d35183dde3e1da288005526545854d0f3 Mon Sep 17 00:00:00 2001 From: nyg Date: Sat, 29 Nov 2025 13:27:59 +0100 Subject: [PATCH] feat!: search AssetPairs endpoint result by name and altname --- .../kraken/example/SimpleExamples.java | 6 ++--- .../dev/andstuff/kraken/api/KrakenAPI.java | 10 ++++--- .../endpoint/market/AssetPairEndpoint.java | 11 +++++--- .../endpoint/market/response/AssetPairs.java | 26 +++++++++++++++++++ 4 files changed, 43 insertions(+), 10 deletions(-) create mode 100644 library/src/main/java/dev/andstuff/kraken/api/endpoint/market/response/AssetPairs.java diff --git a/examples/src/main/java/dev/andstuff/kraken/example/SimpleExamples.java b/examples/src/main/java/dev/andstuff/kraken/example/SimpleExamples.java index 90c8848..b817c9e 100644 --- a/examples/src/main/java/dev/andstuff/kraken/example/SimpleExamples.java +++ b/examples/src/main/java/dev/andstuff/kraken/example/SimpleExamples.java @@ -10,7 +10,7 @@ import dev.andstuff.kraken.api.KrakenAPI; import dev.andstuff.kraken.api.endpoint.market.params.AssetPairParams; import dev.andstuff.kraken.api.endpoint.market.response.AssetInfo; -import dev.andstuff.kraken.api.endpoint.market.response.AssetPair; +import dev.andstuff.kraken.api.endpoint.market.response.AssetPairs; import dev.andstuff.kraken.api.endpoint.market.response.ServerTime; import dev.andstuff.kraken.api.endpoint.market.response.SystemStatus; import dev.andstuff.kraken.api.rest.KrakenCredentials; @@ -37,10 +37,10 @@ public static void main(String[] args) { Map assets2 = publicAPI.assetInfo(List.of("DOT", "ADA"), "currency"); log.info("{}", assets2); - Map pairs1 = publicAPI.assetPairs(List.of("ETH/BTC", "ETH/USD")); + AssetPairs pairs1 = publicAPI.assetPairs(List.of("ETH/BTC", "ETH/USD")); log.info("{}", pairs1); - Map pairs2 = publicAPI.assetPairs(List.of("DOT/USD", "ADA/USD"), AssetPairParams.Info.MARGIN); + AssetPairs pairs2 = publicAPI.assetPairs(List.of("DOT/USD", "ADA/USD"), AssetPairParams.Info.MARGIN); log.info("{}", pairs2); JsonNode ticker = publicAPI.query(KrakenAPI.Public.TICKER, Map.of("pair", "XBTEUR")); diff --git a/library/src/main/java/dev/andstuff/kraken/api/KrakenAPI.java b/library/src/main/java/dev/andstuff/kraken/api/KrakenAPI.java index be2f52f..13f0b83 100644 --- a/library/src/main/java/dev/andstuff/kraken/api/KrakenAPI.java +++ b/library/src/main/java/dev/andstuff/kraken/api/KrakenAPI.java @@ -30,7 +30,7 @@ import dev.andstuff.kraken.api.endpoint.market.TickerEndpoint; import dev.andstuff.kraken.api.endpoint.market.params.AssetPairParams; import dev.andstuff.kraken.api.endpoint.market.response.AssetInfo; -import dev.andstuff.kraken.api.endpoint.market.response.AssetPair; +import dev.andstuff.kraken.api.endpoint.market.response.AssetPairs; import dev.andstuff.kraken.api.endpoint.market.response.ServerTime; import dev.andstuff.kraken.api.endpoint.market.response.SystemStatus; import dev.andstuff.kraken.api.endpoint.market.response.Ticker; @@ -97,11 +97,15 @@ public Map assetInfo(List assets, String assetClass) return restRequester.execute(new AssetInfoEndpoint(assets, assetClass)); } - public Map assetPairs(List pairs) { + public AssetPairs assetPairs() { + return restRequester.execute(new AssetPairEndpoint()); + } + + public AssetPairs assetPairs(List pairs) { return restRequester.execute(new AssetPairEndpoint(pairs)); } - public Map assetPairs(List pair, AssetPairParams.Info info) { + public AssetPairs assetPairs(List pair, AssetPairParams.Info info) { return restRequester.execute(new AssetPairEndpoint(pair, info)); } diff --git a/library/src/main/java/dev/andstuff/kraken/api/endpoint/market/AssetPairEndpoint.java b/library/src/main/java/dev/andstuff/kraken/api/endpoint/market/AssetPairEndpoint.java index 9c67e98..1658f6e 100644 --- a/library/src/main/java/dev/andstuff/kraken/api/endpoint/market/AssetPairEndpoint.java +++ b/library/src/main/java/dev/andstuff/kraken/api/endpoint/market/AssetPairEndpoint.java @@ -1,18 +1,21 @@ package dev.andstuff.kraken.api.endpoint.market; import java.util.List; -import java.util.Map; import com.fasterxml.jackson.core.type.TypeReference; import dev.andstuff.kraken.api.endpoint.market.params.AssetPairParams; -import dev.andstuff.kraken.api.endpoint.market.response.AssetPair; +import dev.andstuff.kraken.api.endpoint.market.response.AssetPairs; import dev.andstuff.kraken.api.endpoint.pub.PublicEndpoint; -public class AssetPairEndpoint extends PublicEndpoint> { +public class AssetPairEndpoint extends PublicEndpoint { + + public AssetPairEndpoint() { + this(null, null); + } public AssetPairEndpoint(List pairs) { - this(pairs, AssetPairParams.Info.ALL); + this(pairs, null); } public AssetPairEndpoint(List pairs, AssetPairParams.Info info) { diff --git a/library/src/main/java/dev/andstuff/kraken/api/endpoint/market/response/AssetPairs.java b/library/src/main/java/dev/andstuff/kraken/api/endpoint/market/response/AssetPairs.java new file mode 100644 index 0000000..9c7d00b --- /dev/null +++ b/library/src/main/java/dev/andstuff/kraken/api/endpoint/market/response/AssetPairs.java @@ -0,0 +1,26 @@ +package dev.andstuff.kraken.api.endpoint.market.response; + +import static java.util.Optional.ofNullable; +import static java.util.function.Function.identity; +import static java.util.stream.Collectors.toMap; + +import java.util.Map; +import java.util.Optional; + +import com.fasterxml.jackson.annotation.JsonCreator; + +public class AssetPairs { + + private final Map assetPairsByName; + private final Map assetPairsByAltName; + + @JsonCreator + public AssetPairs(Map assetPairs) { + assetPairsByName = assetPairs; + assetPairsByAltName = assetPairs.values().stream().collect(toMap(AssetPair::alternateName, identity())); + } + + public Optional findBy(String name) { + return ofNullable(assetPairsByName.getOrDefault(name, assetPairsByAltName.get(name))); + } +}