mirror of
https://github.com/Qortal/qortal.git
synced 2025-02-12 10:15:49 +00:00
Added limit/offset to GET /arbitrary/hosted API endpoints
This commit is contained in:
parent
5e1e653095
commit
13450d5afa
@ -356,12 +356,14 @@ public class ArbitraryResource {
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
@ApiErrors({ApiError.REPOSITORY_ISSUE})
|
@ApiErrors({ApiError.REPOSITORY_ISSUE})
|
||||||
public List<ArbitraryTransactionData> getHostedTransactions(@HeaderParam(Security.API_KEY_HEADER) String apiKey) {
|
public List<ArbitraryTransactionData> getHostedTransactions(@HeaderParam(Security.API_KEY_HEADER) String apiKey,
|
||||||
|
@Parameter(ref = "limit") @QueryParam("limit") Integer limit,
|
||||||
|
@Parameter(ref = "offset") @QueryParam("offset") Integer offset) {
|
||||||
Security.checkApiCallAllowed(request);
|
Security.checkApiCallAllowed(request);
|
||||||
|
|
||||||
try (final Repository repository = RepositoryManager.getRepository()) {
|
try (final Repository repository = RepositoryManager.getRepository()) {
|
||||||
|
|
||||||
List<ArbitraryTransactionData> hostedTransactions = ArbitraryDataStorageManager.getInstance().listAllHostedTransactions(repository);
|
List<ArbitraryTransactionData> hostedTransactions = ArbitraryDataStorageManager.getInstance().listAllHostedTransactions(repository, limit, offset);
|
||||||
|
|
||||||
return hostedTransactions;
|
return hostedTransactions;
|
||||||
|
|
||||||
@ -383,14 +385,16 @@ public class ArbitraryResource {
|
|||||||
@ApiErrors({ApiError.REPOSITORY_ISSUE})
|
@ApiErrors({ApiError.REPOSITORY_ISSUE})
|
||||||
public List<ArbitraryResourceInfo> getHostedResources(
|
public List<ArbitraryResourceInfo> getHostedResources(
|
||||||
@HeaderParam(Security.API_KEY_HEADER) String apiKey,
|
@HeaderParam(Security.API_KEY_HEADER) String apiKey,
|
||||||
@Parameter(description = "Include status") @QueryParam("includestatus") Boolean includeStatus) {
|
@Parameter(description = "Include status") @QueryParam("includestatus") Boolean includeStatus,
|
||||||
|
@Parameter(ref = "limit") @QueryParam("limit") Integer limit,
|
||||||
|
@Parameter(ref = "offset") @QueryParam("offset") Integer offset) {
|
||||||
Security.checkApiCallAllowed(request);
|
Security.checkApiCallAllowed(request);
|
||||||
|
|
||||||
List<ArbitraryResourceInfo> resources = new ArrayList<>();
|
List<ArbitraryResourceInfo> resources = new ArrayList<>();
|
||||||
|
|
||||||
try (final Repository repository = RepositoryManager.getRepository()) {
|
try (final Repository repository = RepositoryManager.getRepository()) {
|
||||||
|
|
||||||
List<ArbitraryTransactionData> transactionDataList = ArbitraryDataStorageManager.getInstance().listAllHostedTransactions(repository);
|
List<ArbitraryTransactionData> transactionDataList = ArbitraryDataStorageManager.getInstance().listAllHostedTransactions(repository, limit, offset);
|
||||||
for (ArbitraryTransactionData transactionData : transactionDataList) {
|
for (ArbitraryTransactionData transactionData : transactionDataList) {
|
||||||
ArbitraryResourceInfo arbitraryResourceInfo = new ArbitraryResourceInfo();
|
ArbitraryResourceInfo arbitraryResourceInfo = new ArbitraryResourceInfo();
|
||||||
arbitraryResourceInfo.name = transactionData.getName();
|
arbitraryResourceInfo.name = transactionData.getName();
|
||||||
|
@ -367,7 +367,7 @@ public class ArbitraryDataManager extends Thread {
|
|||||||
|
|
||||||
public void broadcastHostedSignatureList() {
|
public void broadcastHostedSignatureList() {
|
||||||
try (final Repository repository = RepositoryManager.getRepository()) {
|
try (final Repository repository = RepositoryManager.getRepository()) {
|
||||||
List<ArbitraryTransactionData> hostedTransactions = ArbitraryDataStorageManager.getInstance().listAllHostedTransactions(repository);
|
List<ArbitraryTransactionData> hostedTransactions = ArbitraryDataStorageManager.getInstance().listAllHostedTransactions(repository, null, null);
|
||||||
List<byte[]> hostedSignatures = hostedTransactions.stream().map(ArbitraryTransactionData::getSignature).collect(Collectors.toList());
|
List<byte[]> hostedSignatures = hostedTransactions.stream().map(ArbitraryTransactionData::getSignature).collect(Collectors.toList());
|
||||||
if (!hostedSignatures.isEmpty()) {
|
if (!hostedSignatures.isEmpty()) {
|
||||||
// Broadcast the list, using null to represent our peer address
|
// Broadcast the list, using null to represent our peer address
|
||||||
|
@ -10,6 +10,7 @@ import org.qortal.repository.DataException;
|
|||||||
import org.qortal.repository.Repository;
|
import org.qortal.repository.Repository;
|
||||||
import org.qortal.settings.Settings;
|
import org.qortal.settings.Settings;
|
||||||
import org.qortal.transaction.Transaction;
|
import org.qortal.transaction.Transaction;
|
||||||
|
import org.qortal.utils.ArbitraryTransactionUtils;
|
||||||
import org.qortal.utils.Base58;
|
import org.qortal.utils.Base58;
|
||||||
import org.qortal.utils.FilesystemUtils;
|
import org.qortal.utils.FilesystemUtils;
|
||||||
import org.qortal.utils.NTP;
|
import org.qortal.utils.NTP;
|
||||||
@ -19,6 +20,7 @@ import java.nio.file.Files;
|
|||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Comparator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@ -257,10 +259,10 @@ public class ArbitraryDataStorageManager extends Thread {
|
|||||||
|
|
||||||
// Hosted data
|
// Hosted data
|
||||||
|
|
||||||
public List<ArbitraryTransactionData> listAllHostedTransactions(Repository repository) {
|
public List<ArbitraryTransactionData> listAllHostedTransactions(Repository repository, Integer limit, Integer offset) {
|
||||||
// Load from cache if we can, to avoid disk reads
|
// Load from cache if we can, to avoid disk reads
|
||||||
if (this.hostedTransactions != null) {
|
if (this.hostedTransactions != null) {
|
||||||
return this.hostedTransactions;
|
return ArbitraryTransactionUtils.limitOffsetTransactions(this.hostedTransactions, limit, offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
List<ArbitraryTransactionData> arbitraryTransactionDataList = new ArrayList<>();
|
List<ArbitraryTransactionData> arbitraryTransactionDataList = new ArrayList<>();
|
||||||
@ -293,7 +295,7 @@ public class ArbitraryDataStorageManager extends Thread {
|
|||||||
// Update cache
|
// Update cache
|
||||||
this.hostedTransactions = arbitraryTransactionDataList;
|
this.hostedTransactions = arbitraryTransactionDataList;
|
||||||
|
|
||||||
return arbitraryTransactionDataList;
|
return ArbitraryTransactionUtils.limitOffsetTransactions(arbitraryTransactionDataList, limit, offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -446,7 +448,7 @@ public class ArbitraryDataStorageManager extends Thread {
|
|||||||
long maxStoragePerName = this.storageCapacityPerName(threshold);
|
long maxStoragePerName = this.storageCapacityPerName(threshold);
|
||||||
|
|
||||||
// Fetch all hosted transactions
|
// Fetch all hosted transactions
|
||||||
List<ArbitraryTransactionData> hostedTransactions = this.listAllHostedTransactions(repository);
|
List<ArbitraryTransactionData> hostedTransactions = this.listAllHostedTransactions(repository, null, null);
|
||||||
for (ArbitraryTransactionData transactionData : hostedTransactions) {
|
for (ArbitraryTransactionData transactionData : hostedTransactions) {
|
||||||
String transactionName = transactionData.getName();
|
String transactionName = transactionData.getName();
|
||||||
if (!Objects.equals(name, transactionName)) {
|
if (!Objects.equals(name, transactionName)) {
|
||||||
|
@ -17,7 +17,10 @@ import java.nio.file.Files;
|
|||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
import java.nio.file.attribute.BasicFileAttributes;
|
import java.nio.file.attribute.BasicFileAttributes;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
|
import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
|
||||||
|
|
||||||
@ -352,4 +355,25 @@ public class ArbitraryTransactionUtils {
|
|||||||
return filesRelocatedCount;
|
return filesRelocatedCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static List<ArbitraryTransactionData> limitOffsetTransactions(List<ArbitraryTransactionData> transactions,
|
||||||
|
Integer limit, Integer offset) {
|
||||||
|
if (limit != null && limit == 0) {
|
||||||
|
limit = null;
|
||||||
|
}
|
||||||
|
if (limit == null && offset == null) {
|
||||||
|
return transactions;
|
||||||
|
}
|
||||||
|
if (offset == null) {
|
||||||
|
offset = 0;
|
||||||
|
}
|
||||||
|
if (offset > transactions.size() - 1) {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (limit == null) {
|
||||||
|
return transactions.stream().skip(offset).collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
return transactions.stream().skip(offset).limit(limit).collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user