Support "all" attribute in getoffers API method

This commit is contained in:
helixx87 2023-04-11 12:50:00 +02:00
parent 907090b455
commit 458f50dec9
No known key found for this signature in database
GPG Key ID: CE199883F4C46A86
14 changed files with 48 additions and 30 deletions

View File

@ -277,7 +277,7 @@ public class CreateBSQOffersTest extends AbstractOfferTest {
@Test @Test
@Order(6) @Order(6)
public void testGetAvailableBsqOffers() { public void testGetAvailableBsqOffers() {
List<OfferInfo> offers = bobClient.getOffersSortedByDate(BSQ); List<OfferInfo> offers = bobClient.getOffersSortedByDate(BSQ, false);
log.debug("All Bob's Available BSQ Offers:\n{}", toOffersTable.apply(offers)); log.debug("All Bob's Available BSQ Offers:\n{}", toOffersTable.apply(offers));
assertEquals(4, offers.size()); assertEquals(4, offers.size());
log.debug("BOB'S BALANCES\n{}", formatBalancesTbls(bobClient.getBalances())); log.debug("BOB'S BALANCES\n{}", formatBalancesTbls(bobClient.getBalances()));

View File

@ -274,7 +274,7 @@ public class CreateXMROffersTest extends AbstractOfferTest {
@Test @Test
@Order(6) @Order(6)
public void testGetAvailableXMROffers() { public void testGetAvailableXMROffers() {
List<OfferInfo> offers = bobClient.getOffersSortedByDate(XMR); List<OfferInfo> offers = bobClient.getOffersSortedByDate(XMR, false);
log.debug("All of Bob's available XMR offers:\n{}", toOffersTable.apply(offers)); log.debug("All of Bob's available XMR offers:\n{}", toOffersTable.apply(offers));
assertEquals(4, offers.size()); assertEquals(4, offers.size());
log.debug("Bob's balances\n{}", formatBalancesTbls(bobClient.getBalances())); log.debug("Bob's balances\n{}", formatBalancesTbls(bobClient.getBalances()));

View File

@ -86,7 +86,7 @@ public class TakeSellBTCOfferTest extends AbstractTradeTest {
0L, 0L,
false); false);
sleep(2_500); // Allow available offer to be removed from offer book. sleep(2_500); // Allow available offer to be removed from offer book.
var takeableUsdOffers = bobClient.getOffersSortedByDate(SELL.name(), USD); var takeableUsdOffers = bobClient.getOffersSortedByDate(SELL.name(), USD, false);
assertEquals(0, takeableUsdOffers.size()); assertEquals(0, takeableUsdOffers.size());
trade = bobClient.getTrade(tradeId); trade = bobClient.getTrade(tradeId);

View File

@ -468,7 +468,8 @@ public class CliMain {
} }
var direction = opts.getDirection(); var direction = opts.getDirection();
var currencyCode = opts.getCurrencyCode(); var currencyCode = opts.getCurrencyCode();
List<OfferInfo> offers = client.getOffers(direction, currencyCode); var all = opts.getAll();
List<OfferInfo> offers = client.getOffers(direction, currencyCode, all);
if (offers.isEmpty()) if (offers.isEmpty())
out.printf("no %s %s offers found%n", direction, currencyCode); out.printf("no %s %s offers found%n", direction, currencyCode);
else else

View File

@ -293,16 +293,16 @@ public final class GrpcClient {
return offersServiceRequest.getBsqSwapOffers(direction); return offersServiceRequest.getBsqSwapOffers(direction);
} }
public List<OfferInfo> getOffers(String direction, String currencyCode) { public List<OfferInfo> getOffers(String direction, String currencyCode, boolean all) {
return offersServiceRequest.getOffers(direction, currencyCode); return offersServiceRequest.getOffers(direction, currencyCode, all);
} }
public List<OfferInfo> getOffersSortedByDate(String currencyCode) { public List<OfferInfo> getOffersSortedByDate(String currencyCode, boolean all) {
return offersServiceRequest.getOffersSortedByDate(currencyCode); return offersServiceRequest.getOffersSortedByDate(currencyCode, all);
} }
public List<OfferInfo> getOffersSortedByDate(String direction, String currencyCode) { public List<OfferInfo> getOffersSortedByDate(String direction, String currencyCode, boolean all) {
return offersServiceRequest.getOffersSortedByDate(direction, currencyCode); return offersServiceRequest.getOffersSortedByDate(direction, currencyCode, all);
} }
public List<OfferInfo> getBsqSwapOffersSortedByDate() { public List<OfferInfo> getBsqSwapOffersSortedByDate() {

View File

@ -20,6 +20,7 @@ package bisq.cli.opts;
import joptsimple.OptionSpec; import joptsimple.OptionSpec;
import static bisq.cli.opts.OptLabel.OPT_ALL;
import static bisq.cli.opts.OptLabel.OPT_CURRENCY_CODE; import static bisq.cli.opts.OptLabel.OPT_CURRENCY_CODE;
import static bisq.cli.opts.OptLabel.OPT_DIRECTION; import static bisq.cli.opts.OptLabel.OPT_DIRECTION;
@ -31,6 +32,11 @@ public class GetOffersOptionParser extends AbstractMethodOptionParser implements
final OptionSpec<String> currencyCodeOpt = parser.accepts(OPT_CURRENCY_CODE, "currency code (bsq|xmr|eur|usd|...)") final OptionSpec<String> currencyCodeOpt = parser.accepts(OPT_CURRENCY_CODE, "currency code (bsq|xmr|eur|usd|...)")
.withRequiredArg(); .withRequiredArg();
final OptionSpec<Boolean> allOpt = parser.accepts(OPT_ALL, "get all offers")
.withOptionalArg()
.ofType(boolean.class)
.defaultsTo(Boolean.FALSE);
public GetOffersOptionParser(String[] args) { public GetOffersOptionParser(String[] args) {
super(args); super(args);
} }
@ -58,4 +64,8 @@ public class GetOffersOptionParser extends AbstractMethodOptionParser implements
public String getCurrencyCode() { public String getCurrencyCode() {
return options.valueOf(currencyCodeOpt); return options.valueOf(currencyCodeOpt);
} }
public boolean getAll() {
return options.valueOf(allOpt);
}
} }

View File

@ -26,6 +26,7 @@ public class OptLabel {
public final static String OPT_AMOUNT = "amount"; public final static String OPT_AMOUNT = "amount";
public final static String OPT_CATEGORY = "category"; public final static String OPT_CATEGORY = "category";
public final static String OPT_CURRENCY_CODE = "currency-code"; public final static String OPT_CURRENCY_CODE = "currency-code";
public final static String OPT_ALL = "all";
public final static String OPT_DAYS = "days"; public final static String OPT_DAYS = "days";
public final static String OPT_DIRECTION = "direction"; public final static String OPT_DIRECTION = "direction";
public final static String OPT_DISPUTE_AGENT_TYPE = "dispute-agent-type"; public final static String OPT_DISPUTE_AGENT_TYPE = "dispute-agent-type";

View File

@ -231,23 +231,24 @@ public class OffersServiceRequest {
return grpcStubs.offersService.getBsqSwapOffers(request).getBsqSwapOffersList(); return grpcStubs.offersService.getBsqSwapOffers(request).getBsqSwapOffersList();
} }
public List<OfferInfo> getOffers(String direction, String currencyCode) { public List<OfferInfo> getOffers(String direction, String currencyCode, boolean all) {
var request = GetOffersRequest.newBuilder() var request = GetOffersRequest.newBuilder()
.setDirection(direction) .setDirection(direction)
.setCurrencyCode(currencyCode) .setCurrencyCode(currencyCode)
.setAll(all)
.build(); .build();
return grpcStubs.offersService.getOffers(request).getOffersList(); return grpcStubs.offersService.getOffers(request).getOffersList();
} }
public List<OfferInfo> getOffersSortedByDate(String currencyCode) { public List<OfferInfo> getOffersSortedByDate(String currencyCode, boolean all) {
ArrayList<OfferInfo> offers = new ArrayList<>(); ArrayList<OfferInfo> offers = new ArrayList<>();
offers.addAll(getOffers(BUY.name(), currencyCode)); offers.addAll(getOffers(BUY.name(), currencyCode, all));
offers.addAll(getOffers(SELL.name(), currencyCode)); offers.addAll(getOffers(SELL.name(), currencyCode, all));
return offers.isEmpty() ? offers : sortOffersByDate(offers); return offers.isEmpty() ? offers : sortOffersByDate(offers);
} }
public List<OfferInfo> getOffersSortedByDate(String direction, String currencyCode) { public List<OfferInfo> getOffersSortedByDate(String direction, String currencyCode, boolean all) {
var offers = getOffers(direction, currencyCode); var offers = getOffers(direction, currencyCode, all);
return offers.isEmpty() ? offers : sortOffersByDate(offers); return offers.isEmpty() ? offers : sortOffersByDate(offers);
} }
@ -292,8 +293,8 @@ public class OffersServiceRequest {
return sortOffersByDate(offers); return sortOffersByDate(offers);
} }
public OfferInfo getMostRecentOffer(String direction, String currencyCode) { public OfferInfo getMostRecentOffer(String direction, String currencyCode, boolean all) {
List<OfferInfo> offers = getOffersSortedByDate(direction, currencyCode); List<OfferInfo> offers = getOffersSortedByDate(direction, currencyCode, all);
return offers.isEmpty() ? null : offers.get(offers.size() - 1); return offers.isEmpty() ? null : offers.get(offers.size() - 1);
} }

View File

@ -59,12 +59,12 @@ public class GetOffersCliOutputDiffTest extends AbstractCliTest {
} }
private void getAvailableBuyUsdOffers() { private void getAvailableBuyUsdOffers() {
var offers = bobClient.getOffers(BUY.name(), "USD"); var offers = bobClient.getOffers(BUY.name(), "USD", false);
printAndCheckDiffs(offers, BUY.name(), "USD"); printAndCheckDiffs(offers, BUY.name(), "USD");
} }
private void getAvailableSellUsdOffers() { private void getAvailableSellUsdOffers() {
var offers = bobClient.getOffers(SELL.name(), "USD"); var offers = bobClient.getOffers(SELL.name(), "USD", false);
printAndCheckDiffs(offers, SELL.name(), "USD"); printAndCheckDiffs(offers, SELL.name(), "USD");
} }
@ -79,12 +79,12 @@ public class GetOffersCliOutputDiffTest extends AbstractCliTest {
} }
private void getAvailableBuyXmrOffers() { private void getAvailableBuyXmrOffers() {
var offers = bobClient.getOffers(BUY.name(), "XMR"); var offers = bobClient.getOffers(BUY.name(), "XMR", false);
printAndCheckDiffs(offers, BUY.name(), "XMR"); printAndCheckDiffs(offers, BUY.name(), "XMR");
} }
private void getAvailableSellXmrOffers() { private void getAvailableSellXmrOffers() {
var offers = bobClient.getOffers(SELL.name(), "XMR"); var offers = bobClient.getOffers(SELL.name(), "XMR", false);
printAndCheckDiffs(offers, SELL.name(), "XMR"); printAndCheckDiffs(offers, SELL.name(), "XMR");
} }
@ -99,12 +99,12 @@ public class GetOffersCliOutputDiffTest extends AbstractCliTest {
} }
private void getAvailableBuyBsqOffers() { private void getAvailableBuyBsqOffers() {
var offers = bobClient.getOffers(BUY.name(), "BSQ"); var offers = bobClient.getOffers(BUY.name(), "BSQ", false);
printAndCheckDiffs(offers, BUY.name(), "BSQ"); printAndCheckDiffs(offers, BUY.name(), "BSQ");
} }
private void getAvailableSellBsqOffers() { private void getAvailableSellBsqOffers() {
var offers = bobClient.getOffers(SELL.name(), "BSQ"); var offers = bobClient.getOffers(SELL.name(), "BSQ", false);
printAndCheckDiffs(offers, SELL.name(), "BSQ"); printAndCheckDiffs(offers, SELL.name(), "BSQ");
} }

View File

@ -164,8 +164,8 @@ public class CoreApi {
return coreOffersService.getBsqSwapOffers(direction); return coreOffersService.getBsqSwapOffers(direction);
} }
public List<Offer> getOffers(String direction, String currencyCode) { public List<Offer> getOffers(String direction, String currencyCode, boolean all) {
return coreOffersService.getOffers(direction, currencyCode); return coreOffersService.getOffers(direction, currencyCode, all);
} }
public List<OpenOffer> getMyOffers(String direction, String currencyCode) { public List<OpenOffer> getMyOffers(String direction, String currencyCode) {

View File

@ -206,14 +206,14 @@ class CoreOffersService {
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
List<Offer> getOffers(String direction, String currencyCode) { List<Offer> getOffers(String direction, String currencyCode, boolean all) {
var upperCaseCurrencyCode = currencyCode.toUpperCase(); var upperCaseCurrencyCode = currencyCode.toUpperCase();
var isFiat = isFiatCurrency(upperCaseCurrencyCode); var isFiat = isFiatCurrency(upperCaseCurrencyCode);
if (isFiat) { if (isFiat) {
return offerBookService.getOffers().stream() return offerBookService.getOffers().stream()
.filter(o -> !o.isMyOffer(keyRing)) .filter(o -> !o.isMyOffer(keyRing))
.filter(o -> offerMatchesDirectionAndCurrency(o, direction, upperCaseCurrencyCode)) .filter(o -> offerMatchesDirectionAndCurrency(o, direction, upperCaseCurrencyCode))
.filter(o -> offerFilterService.canTakeOffer(o, coreContext.isApiUser()).isValid()) .filter(o -> all || offerFilterService.canTakeOffer(o, coreContext.isApiUser()).isValid())
.sorted(priceComparator(direction, true)) .sorted(priceComparator(direction, true))
.collect(Collectors.toList()); .collect(Collectors.toList());
} else { } else {
@ -226,7 +226,7 @@ class CoreOffersService {
.filter(o -> !o.isMyOffer(keyRing)) .filter(o -> !o.isMyOffer(keyRing))
.filter(o -> offerMatchesDirectionAndCurrency(o, direction, "BTC")) .filter(o -> offerMatchesDirectionAndCurrency(o, direction, "BTC"))
.filter(o -> o.getBaseCurrencyCode().equalsIgnoreCase(upperCaseCurrencyCode)) .filter(o -> o.getBaseCurrencyCode().equalsIgnoreCase(upperCaseCurrencyCode))
.filter(o -> offerFilterService.canTakeOffer(o, coreContext.isApiUser()).isValid()) .filter(o -> all || offerFilterService.canTakeOffer(o, coreContext.isApiUser()).isValid())
.sorted(priceComparator(direction, false)) .sorted(priceComparator(direction, false))
.collect(Collectors.toList()); .collect(Collectors.toList());
else else

View File

@ -9,6 +9,7 @@ SYNOPSIS
getoffers getoffers
--direction=<buy|sell> --direction=<buy|sell>
--currency-code=<eur|usd> --currency-code=<eur|usd>
--all=<true|false>
DESCRIPTION DESCRIPTION
----------- -----------
@ -24,6 +25,9 @@ OPTIONS
--currency-code --currency-code
The three letter code for the fiat used to buy or sell BTC, e.g., EUR, USD, BRL, ... The three letter code for the fiat used to buy or sell BTC, e.g., EUR, USD, BRL, ...
--all
Whether return all offers or only these matching my accounts
EXAMPLES EXAMPLES
-------- --------
You have one Brazilian Real payment account with a face-to-face payment method type. You have one Brazilian Real payment account with a face-to-face payment method type.

View File

@ -195,7 +195,7 @@ class GrpcOffersService extends OffersImplBase {
public void getOffers(GetOffersRequest req, public void getOffers(GetOffersRequest req,
StreamObserver<GetOffersReply> responseObserver) { StreamObserver<GetOffersReply> responseObserver) {
try { try {
List<OfferInfo> result = coreApi.getOffers(req.getDirection(), req.getCurrencyCode()) List<OfferInfo> result = coreApi.getOffers(req.getDirection(), req.getCurrencyCode(), req.getAll())
.stream() .stream()
.map(OfferInfo::toOfferInfo) .map(OfferInfo::toOfferInfo)
.collect(Collectors.toList()); .collect(Collectors.toList());

View File

@ -148,6 +148,7 @@ message GetMyOfferReply {
message GetOffersRequest { message GetOffersRequest {
string direction = 1; // The offer's BUY (BTC) or SELL (BTC) direction. string direction = 1; // The offer's BUY (BTC) or SELL (BTC) direction.
string currency_code = 2; // The offer's fiat or altcoin currency code. string currency_code = 2; // The offer's fiat or altcoin currency code.
bool all = 3; // Return all or only these matching my account
} }
message GetOffersReply { message GetOffersReply {