From f231aacb3138b77a826413e4ada170c9a1b643e8 Mon Sep 17 00:00:00 2001 From: ghubstan <36207203+ghubstan@users.noreply.github.com> Date: Wed, 26 Jan 2022 11:43:31 -0300 Subject: [PATCH] Sort API gettrades's response list by trade date --- .../java/bisq/core/api/CoreTradesService.java | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/core/src/main/java/bisq/core/api/CoreTradesService.java b/core/src/main/java/bisq/core/api/CoreTradesService.java index f31efdce6d1..a169f27caae 100644 --- a/core/src/main/java/bisq/core/api/CoreTradesService.java +++ b/core/src/main/java/bisq/core/api/CoreTradesService.java @@ -49,9 +49,11 @@ import javax.inject.Inject; import javax.inject.Singleton; +import java.util.Comparator; import java.util.List; import java.util.Optional; import java.util.function.Consumer; +import java.util.function.Supplier; import java.util.stream.Collectors; import lombok.extern.slf4j.Slf4j; @@ -59,11 +61,15 @@ import static bisq.core.btc.model.AddressEntry.Context.TRADE_PAYOUT; import static bisq.proto.grpc.GetTradesRequest.Category.CLOSED; import static java.lang.String.format; +import static java.util.Comparator.comparing; @Singleton @Slf4j class CoreTradesService { + private final Supplier> dateComparator = () -> + comparing(TradeModel::getDate); + private final CoreContext coreContext; // Dependencies on core api services in this package must be kept to an absolute // minimum, but some trading functions require an unlocked wallet's key, so an @@ -292,7 +298,10 @@ Trade getTrade(String tradeId) { List getOpenTrades() { coreWalletsService.verifyWalletsAreAvailable(); coreWalletsService.verifyEncryptedWalletIsUnlocked(); - return tradeManager.getTrades().stream().map(t -> (TradeModel) t).collect(Collectors.toList()); + return tradeManager.getTrades().stream() + .map(t -> (TradeModel) t) + .sorted(dateComparator.get()) + .collect(Collectors.toList()); } List getTradeHistory(GetTradesRequest.Category category) { @@ -303,16 +312,18 @@ List getTradeHistory(GetTradesRequest.Category category) { .map(t -> (TradeModel) t) .collect(Collectors.toList()); closedTrades.addAll(bsqSwapTradeManager.getBsqSwapTrades()); - // TODO Sort closedTrades by date? - return closedTrades; + return closedTrades.stream().sorted(dateComparator.get()).collect(Collectors.toList()); } else { var failedV1Trades = failedTradesManager.getTrades(); - return failedV1Trades.stream().map(t -> (TradeModel) t).collect(Collectors.toList()); + return failedV1Trades.stream() + .map(t -> (TradeModel) t) + .sorted(dateComparator.get()) + .collect(Collectors.toList()); } } void failTrade(String tradeId) { - // TODO Recommend that API users should use this method with extra care because + // TODO Recommend API users call this method with extra care because // the API lacks methods for diagnosing trade problems, and does not support // interaction with mediators. Users may accidentally fail valid trades, // although they can easily be un-failed with the 'unfailtrade' method.