From b4d0f9ab684717898fb81d7c5461a554975ffed3 Mon Sep 17 00:00:00 2001 From: catbref Date: Fri, 26 Apr 2019 09:23:44 +0100 Subject: [PATCH] Allow multiple txType in API GET /transactions/search --- .../org/qora/api/resource/TransactionsResource.java | 6 +++--- .../org/qora/repository/TransactionRepository.java | 2 +- .../transaction/HSQLDBTransactionRepository.java | 10 ++++++---- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/qora/api/resource/TransactionsResource.java b/src/main/java/org/qora/api/resource/TransactionsResource.java index ed5deec5..d86040d3 100644 --- a/src/main/java/org/qora/api/resource/TransactionsResource.java +++ b/src/main/java/org/qora/api/resource/TransactionsResource.java @@ -291,7 +291,7 @@ public class TransactionsResource { ApiError.INVALID_CRITERIA, ApiError.REPOSITORY_ISSUE }) public List searchTransactions(@QueryParam("startBlock") Integer startBlock, @QueryParam("blockLimit") Integer blockLimit, - @QueryParam("txType") TransactionType txType, @QueryParam("address") String address, @Parameter( + @QueryParam("txType") List txTypes, @QueryParam("address") String address, @Parameter( description = "whether to include confirmed, unconfirmed or both", required = true ) @QueryParam("confirmationStatus") ConfirmationStatus confirmationStatus, @Parameter( @@ -302,7 +302,7 @@ public class TransactionsResource { ref = "reverse" ) @QueryParam("reverse") Boolean reverse) { // Must have at least one of txType / address / limit <= 20 - if (txType == null && (address == null || address.isEmpty()) && (limit == null || limit > 20)) + if ((txTypes == null || txTypes.isEmpty()) && (address == null || address.isEmpty()) && (limit == null || limit > 20)) throw ApiExceptionFactory.INSTANCE.createException(request, ApiError.INVALID_CRITERIA); // You can't ask for unconfirmed and impose a block height range @@ -310,7 +310,7 @@ public class TransactionsResource { throw ApiExceptionFactory.INSTANCE.createException(request, ApiError.INVALID_CRITERIA); try (final Repository repository = RepositoryManager.getRepository()) { - List signatures = repository.getTransactionRepository().getSignaturesMatchingCriteria(startBlock, blockLimit, txType, address, + List signatures = repository.getTransactionRepository().getSignaturesMatchingCriteria(startBlock, blockLimit, txTypes, address, confirmationStatus, limit, offset, reverse); // Expand signatures to transactions diff --git a/src/main/java/org/qora/repository/TransactionRepository.java b/src/main/java/org/qora/repository/TransactionRepository.java index 103a6174..3978ca28 100644 --- a/src/main/java/org/qora/repository/TransactionRepository.java +++ b/src/main/java/org/qora/repository/TransactionRepository.java @@ -46,7 +46,7 @@ public interface TransactionRepository { */ public Map getTransactionSummary(int startHeight, int endHeight) throws DataException; - public List getSignaturesMatchingCriteria(Integer startBlock, Integer blockLimit, TransactionType txType, String address, + public List getSignaturesMatchingCriteria(Integer startBlock, Integer blockLimit, List txTypes, String address, ConfirmationStatus confirmationStatus, Integer limit, Integer offset, Boolean reverse) throws DataException; /** diff --git a/src/main/java/org/qora/repository/hsqldb/transaction/HSQLDBTransactionRepository.java b/src/main/java/org/qora/repository/hsqldb/transaction/HSQLDBTransactionRepository.java index 5d71f794..c885bd85 100644 --- a/src/main/java/org/qora/repository/hsqldb/transaction/HSQLDBTransactionRepository.java +++ b/src/main/java/org/qora/repository/hsqldb/transaction/HSQLDBTransactionRepository.java @@ -355,12 +355,12 @@ public class HSQLDBTransactionRepository implements TransactionRepository { } @Override - public List getSignaturesMatchingCriteria(Integer startBlock, Integer blockLimit, TransactionType txType, String address, + public List getSignaturesMatchingCriteria(Integer startBlock, Integer blockLimit, List txTypes, String address, ConfirmationStatus confirmationStatus, Integer limit, Integer offset, Boolean reverse) throws DataException { List signatures = new ArrayList(); boolean hasAddress = address != null && !address.isEmpty(); - boolean hasTxType = txType != null; + boolean hasTxTypes = txTypes != null && !txTypes.isEmpty(); boolean hasHeightRange = startBlock != null || blockLimit != null; if (hasHeightRange && startBlock == null) @@ -407,8 +407,10 @@ public class HSQLDBTransactionRepository implements TransactionRepository { whereClauses.add("Blocks.height < " + (startBlock + blockLimit)); } - if (hasTxType) - whereClauses.add("Transactions.type = " + txType.value); + if (hasTxTypes) { + whereClauses.add("Transactions.type IN (" + HSQLDBRepository.nPlaceholders(txTypes.size()) + ")"); + bindParams.addAll(txTypes.stream().map(txType -> txType.value).collect(Collectors.toList())); + } if (hasAddress) { whereClauses.add("TransactionParticipants.participant = ?");