From b80aec37e003721af7caa0a4fafb4478dec9493b Mon Sep 17 00:00:00 2001 From: CalDescent Date: Fri, 3 Dec 2021 21:43:18 +0000 Subject: [PATCH] Added GET /arbitrary/hosted/resources API to list all arbitrary resources that the node is hosting (at least partial) data for. --- .../api/resource/ArbitraryResource.java | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/src/main/java/org/qortal/api/resource/ArbitraryResource.java b/src/main/java/org/qortal/api/resource/ArbitraryResource.java index c289ac3e..45a75bec 100644 --- a/src/main/java/org/qortal/api/resource/ArbitraryResource.java +++ b/src/main/java/org/qortal/api/resource/ArbitraryResource.java @@ -614,6 +614,54 @@ public class ArbitraryResource { } } + @GET + @Path("/hosted/resources") + @Operation( + summary = "List arbitrary resources hosted by this node", + responses = { + @ApiResponse( + content = @Content(mediaType = MediaType.APPLICATION_JSON, schema = @Schema(implementation = ArbitraryResourceInfo.class)) + ) + } + ) + @ApiErrors({ApiError.REPOSITORY_ISSUE}) + public List getHostedResources( + @Parameter(description = "Include status") @QueryParam("includestatus") Boolean includeStatus) { + Security.checkApiCallAllowed(request); + + List resources = new ArrayList<>(); + + try (final Repository repository = RepositoryManager.getRepository()) { + + List transactionDataList = ArbitraryDataStorageManager.getInstance().listAllHostedData(repository); + for (ArbitraryTransactionData transactionData : transactionDataList) { + ArbitraryTransaction transaction = new ArbitraryTransaction(repository, transactionData); + if (transaction.isDataLocal()) { + String name = transactionData.getName(); + Service service = transactionData.getService(); + String identifier = transactionData.getIdentifier(); + + if (transactionData.getName() != null) { + List transactionResources = repository.getArbitraryRepository() + .getArbitraryResources(service, identifier, name, (identifier == null), null, null, false); + if (transactionResources != null) { + resources.addAll(transactionResources); + } + } + } + } + + if (includeStatus != null && includeStatus == true) { + resources = this.addStatusToResources(resources); + } + + return resources; + + } catch (DataException | IOException e) { + throw ApiExceptionFactory.INSTANCE.createException(request, ApiError.REPOSITORY_ISSUE, e); + } + } + @POST @Path("/compute") @Operation(