forked from Qortal/qortal
Add API GET /assets/transfers/{assetid}/{address}
This commit is contained in:
parent
2a45e27048
commit
0fd8ee3547
@ -623,6 +623,50 @@ public class AssetsResource {
|
||||
}
|
||||
}
|
||||
|
||||
@GET
|
||||
@Path("/transfers/{assetid}/{address}")
|
||||
@Operation(
|
||||
summary = "Asset transfers for specific asset and address combination",
|
||||
responses = {
|
||||
@ApiResponse(
|
||||
description = "Asset transactions",
|
||||
content = @Content(
|
||||
array = @ArraySchema(
|
||||
schema = @Schema(
|
||||
implementation = TransferAssetTransactionData.class
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
}
|
||||
)
|
||||
@ApiErrors({
|
||||
ApiError.INVALID_ADDRESS, ApiError.INVALID_ASSET_ID, ApiError.REPOSITORY_ISSUE
|
||||
})
|
||||
public List<TransferAssetTransactionData> getAssetTransfers(@Parameter(
|
||||
ref = "assetid"
|
||||
) @PathParam("assetid") int assetId, @PathParam("address") String address, @Parameter(
|
||||
ref = "limit"
|
||||
) @QueryParam("limit") Integer limit, @Parameter(
|
||||
ref = "offset"
|
||||
) @QueryParam("offset") Integer offset, @Parameter(
|
||||
ref = "reverse"
|
||||
) @QueryParam("reverse") Boolean reverse) {
|
||||
try (final Repository repository = RepositoryManager.getRepository()) {
|
||||
if (!repository.getAssetRepository().assetExists(assetId))
|
||||
throw ApiExceptionFactory.INSTANCE.createException(request, ApiError.INVALID_ASSET_ID);
|
||||
|
||||
if (!Crypto.isValidAddress(address))
|
||||
throw ApiExceptionFactory.INSTANCE.createException(request, ApiError.INVALID_ADDRESS);
|
||||
|
||||
return repository.getTransactionRepository().getAssetTransfers(assetId, address, limit, offset, reverse);
|
||||
} catch (ApiException e) {
|
||||
throw e;
|
||||
} catch (DataException e) {
|
||||
throw ApiExceptionFactory.INSTANCE.createException(request, ApiError.REPOSITORY_ISSUE, e);
|
||||
}
|
||||
}
|
||||
|
||||
@POST
|
||||
@Path("/order/delete")
|
||||
@Operation(
|
||||
|
@ -10,9 +10,9 @@ import javax.xml.bind.annotation.XmlAccessorType;
|
||||
public class PaymentData {
|
||||
|
||||
// Properties
|
||||
protected String recipient;
|
||||
protected long assetId;
|
||||
protected BigDecimal amount;
|
||||
private String recipient;
|
||||
private long assetId;
|
||||
private BigDecimal amount;
|
||||
|
||||
// Constructors
|
||||
|
||||
|
@ -6,6 +6,7 @@ import java.util.Map;
|
||||
import org.qora.api.resource.TransactionsResource.ConfirmationStatus;
|
||||
import org.qora.data.transaction.GroupApprovalTransactionData;
|
||||
import org.qora.data.transaction.TransactionData;
|
||||
import org.qora.data.transaction.TransferAssetTransactionData;
|
||||
import org.qora.transaction.Transaction.TransactionType;
|
||||
|
||||
public interface TransactionRepository {
|
||||
@ -52,12 +53,26 @@ public interface TransactionRepository {
|
||||
* Returns list of transactions relating to specific asset ID.
|
||||
*
|
||||
* @param assetId
|
||||
* @param confirmationStatus
|
||||
* @param limit
|
||||
* @param offset
|
||||
* @param reverse
|
||||
* @return list of transactions, or empty if none
|
||||
*/
|
||||
public List<TransactionData> getAssetTransactions(int assetId, ConfirmationStatus confirmationStatus, Integer limit, Integer offset, Boolean reverse)
|
||||
public List<TransactionData> getAssetTransactions(long assetId, ConfirmationStatus confirmationStatus, Integer limit, Integer offset, Boolean reverse)
|
||||
throws DataException;
|
||||
|
||||
/**
|
||||
* Returns list of TRANSFER_ASSET transactions relating to specific asset ID/address combination.
|
||||
*
|
||||
* @param assetId
|
||||
* @param address
|
||||
* @param limit
|
||||
* @param offset
|
||||
* @param reverse
|
||||
* @return list of transactions, or empty if none
|
||||
*/
|
||||
public List<TransferAssetTransactionData> getAssetTransfers(long assetId, String address, Integer limit, Integer offset, Boolean reverse)
|
||||
throws DataException;
|
||||
|
||||
/**
|
||||
|
@ -22,6 +22,7 @@ import org.qora.api.resource.TransactionsResource.ConfirmationStatus;
|
||||
import org.qora.data.PaymentData;
|
||||
import org.qora.data.transaction.GroupApprovalTransactionData;
|
||||
import org.qora.data.transaction.TransactionData;
|
||||
import org.qora.data.transaction.TransferAssetTransactionData;
|
||||
import org.qora.group.Group;
|
||||
import org.qora.repository.DataException;
|
||||
import org.qora.repository.TransactionRepository;
|
||||
@ -446,7 +447,7 @@ public class HSQLDBTransactionRepository implements TransactionRepository {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<TransactionData> getAssetTransactions(int assetId, ConfirmationStatus confirmationStatus, Integer limit, Integer offset, Boolean reverse)
|
||||
public List<TransactionData> getAssetTransactions(long assetId, ConfirmationStatus confirmationStatus, Integer limit, Integer offset, Boolean reverse)
|
||||
throws DataException {
|
||||
TransactionType[] transactionTypes = new TransactionType[] {
|
||||
ISSUE_ASSET, TRANSFER_ASSET, CREATE_ASSET_ORDER, CANCEL_ASSET_ORDER
|
||||
@ -531,6 +532,43 @@ public class HSQLDBTransactionRepository implements TransactionRepository {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<TransferAssetTransactionData> getAssetTransfers(long assetId, String address, Integer limit, Integer offset, Boolean reverse)
|
||||
throws DataException {
|
||||
String sql = "SELECT creation, tx_group_id, reference, fee, signature, sender, recipient, amount FROM TransferAssetTransactions "
|
||||
+ "JOIN Transactions USING (signature) "
|
||||
+ "JOIN Accounts ON public_key = sender "
|
||||
+ "WHERE asset_id = ? AND ? IN (account, recipient) "
|
||||
+ "ORDER by creation ";
|
||||
|
||||
sql += (reverse == null || !reverse) ? "ASC" : "DESC";
|
||||
sql += HSQLDBRepository.limitOffsetSql(limit, offset);
|
||||
|
||||
List<TransferAssetTransactionData> assetTransfers = new ArrayList<>();
|
||||
|
||||
try (ResultSet resultSet = this.repository.checkedExecute(sql, assetId, address)) {
|
||||
if (resultSet == null)
|
||||
return assetTransfers;
|
||||
|
||||
do {
|
||||
long timestamp = resultSet.getTimestamp(1, Calendar.getInstance(HSQLDBRepository.UTC)).getTime();
|
||||
int txGroupId = resultSet.getInt(2);
|
||||
byte[] reference = resultSet.getBytes(3);
|
||||
BigDecimal fee = resultSet.getBigDecimal(4).setScale(8);
|
||||
byte[] signature = resultSet.getBytes(5);
|
||||
byte[] creatorPublicKey = resultSet.getBytes(6);
|
||||
String recipient = resultSet.getString(7);
|
||||
BigDecimal amount = resultSet.getBigDecimal(8);
|
||||
|
||||
assetTransfers.add(new TransferAssetTransactionData(timestamp, txGroupId, reference, creatorPublicKey, recipient, amount, assetId, fee, signature));
|
||||
} while (resultSet.next());
|
||||
|
||||
return assetTransfers;
|
||||
} catch (SQLException e) {
|
||||
throw new DataException("Unable to fetch asset-transfer transactions from repository", e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<TransactionData> getPendingTransactions(Integer txGroupId, Integer limit, Integer offset, Boolean reverse) throws DataException {
|
||||
String[] txTypesNeedingApproval = stream(Transaction.TransactionType.values())
|
||||
|
Loading…
Reference in New Issue
Block a user