diff --git a/registry-persistence/src/main/java/org/gbif/registry/persistence/mapper/collections/CollectionMapper.java b/registry-persistence/src/main/java/org/gbif/registry/persistence/mapper/collections/CollectionMapper.java index de2826d86..a2ce5f2e5 100644 --- a/registry-persistence/src/main/java/org/gbif/registry/persistence/mapper/collections/CollectionMapper.java +++ b/registry-persistence/src/main/java/org/gbif/registry/persistence/mapper/collections/CollectionMapper.java @@ -63,4 +63,6 @@ public interface CollectionMapper */ List findByDatasetOrganizationAsMasterSource( @Param("organizationKey") UUID organizationKey); + + List getAllKeys(); } diff --git a/registry-persistence/src/main/java/org/gbif/registry/persistence/mapper/collections/InstitutionMapper.java b/registry-persistence/src/main/java/org/gbif/registry/persistence/mapper/collections/InstitutionMapper.java index 400e1f4b6..82360c45d 100644 --- a/registry-persistence/src/main/java/org/gbif/registry/persistence/mapper/collections/InstitutionMapper.java +++ b/registry-persistence/src/main/java/org/gbif/registry/persistence/mapper/collections/InstitutionMapper.java @@ -50,4 +50,6 @@ void convertToCollection( @Param("institutionKey") UUID institutionKey, @Param("collectionKey") UUID collectionKey); List listGeoJson(@Param("params") InstitutionSearchParams searchParams); + + List getAllKeys(); } diff --git a/registry-persistence/src/main/resources/org/gbif/registry/persistence/mapper/collections/CollectionMapper.xml b/registry-persistence/src/main/resources/org/gbif/registry/persistence/mapper/collections/CollectionMapper.xml index 47ed5b239..1d9964d74 100644 --- a/registry-persistence/src/main/resources/org/gbif/registry/persistence/mapper/collections/CollectionMapper.xml +++ b/registry-persistence/src/main/resources/org/gbif/registry/persistence/mapper/collections/CollectionMapper.xml @@ -426,6 +426,10 @@ WHERE key = aux.entity_key::uuid + + + SELECT key FROM institution WHERE deleted IS NULL + + i.key, i.name, i.code, i.address_key, i.mailing_address_key, akeys(i.alternative_codes) AS alternative_codes, i.active diff --git a/registry-ws/src/main/java/org/gbif/registry/ws/resources/scheduled/GRSciCollCountsUpdaterService.java b/registry-ws/src/main/java/org/gbif/registry/ws/resources/scheduled/GRSciCollCountsUpdaterService.java index 22ea37d49..6baf5f31a 100644 --- a/registry-ws/src/main/java/org/gbif/registry/ws/resources/scheduled/GRSciCollCountsUpdaterService.java +++ b/registry-ws/src/main/java/org/gbif/registry/ws/resources/scheduled/GRSciCollCountsUpdaterService.java @@ -28,11 +28,9 @@ import org.gbif.ws.client.ClientBuilder; import org.gbif.ws.json.JacksonJsonObjectMapperProvider; -import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; -import java.util.UUID; +import java.util.*; import java.util.function.Function; +import java.util.stream.Collectors; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -81,9 +79,9 @@ public void scheduleUpdateCounts() { private void updateCounts() { log.info("Updating GRSciColl counts"); - long institutionsCount = institutionMapper.count(InstitutionSearchParams.builder().build()); - long collectionsCount = collectionMapper.count(CollectionSearchParams.builder().build()); - long facetCount = Math.max(institutionsCount, collectionsCount); + List institutionKeys = institutionMapper.getAllKeys(); + List collectionKeys = collectionMapper.getAllKeys(); + long facetCount = Math.max(institutionKeys.size(), collectionKeys.size()); OccurrenceSearchRequest request = new OccurrenceSearchRequest(); request.setLimit(0); @@ -93,8 +91,32 @@ private void updateCounts() { SearchResponse occurrenceCountsResponse = occurrenceWsSearchClient.search(request); - Map institutionsCounts = new HashMap<>(); - Map collectionsCounts = new HashMap<>(); + // all entities are initialised to zero because the occurrence response doesn't return values + // with count zero and if they used to have records we need to update them to zero + Map institutionsCounts = + institutionKeys.stream() + .collect( + Collectors.toMap( + k -> k, + k -> { + Count c = new Count(); + c.setKey(k); + c.setOccurrenceCount(0); + c.setTypeSpecimenCount(0); + return c; + })); + Map collectionsCounts = + collectionKeys.stream() + .collect( + Collectors.toMap( + k -> k, + k -> { + Count c = new Count(); + c.setKey(k); + c.setOccurrenceCount(0); + c.setTypeSpecimenCount(0); + return c; + })); Function> mapCountsSupplier = p -> {