diff --git a/registry-integration-tests/src/test/java/org/gbif/registry/ws/it/OccurrenceDownloadIT.java b/registry-integration-tests/src/test/java/org/gbif/registry/ws/it/OccurrenceDownloadIT.java index b05354144..198335809 100644 --- a/registry-integration-tests/src/test/java/org/gbif/registry/ws/it/OccurrenceDownloadIT.java +++ b/registry-integration-tests/src/test/java/org/gbif/registry/ws/it/OccurrenceDownloadIT.java @@ -548,6 +548,28 @@ public void testDownloadUsages(ServiceType serviceType) { occurrenceDownload.getKey(), null, null, null, new PagingRequest()); assertEquals(2, organizationUsages.getResults().size()); assertEquals(2, organizationUsages.getCount()); + + organizationUsages = + service.listOrganizationUsages( + occurrenceDownload.getKey(), + null, + OrganizationUsageSortField.COUNTRY_CODE, + null, + new PagingRequest(0, 1)); + assertEquals(1, organizationUsages.getResults().size()); + assertEquals(2, organizationUsages.getCount()); + + organizationUsages = + service.listOrganizationUsages( + occurrenceDownload.getKey(), + null, + OrganizationUsageSortField.COUNTRY_CODE, + SortOrder.DESC, + new PagingRequest(1, 1)); + assertEquals(1, organizationUsages.getResults().size()); + assertEquals(2, organizationUsages.getCount()); + assertEquals(o.getKey(), organizationUsages.getResults().get(0).getOrganizationKey()); + organizationUsages = service.listOrganizationUsages( occurrenceDownload.getKey(), @@ -579,6 +601,18 @@ public void testDownloadUsages(ServiceType serviceType) { assertEquals(2, countryUsages.getResults().size()); assertEquals(2, countryUsages.getCount()); + countryUsages = + service.listCountryUsages( + occurrenceDownload.getKey(), + CountryUsageSortField.COUNTRY_CODE, + SortOrder.DESC, + new PagingRequest(1, 1)); + assertEquals(1, countryUsages.getResults().size()); + assertEquals(2, countryUsages.getCount()); + assertEquals( + Country.DENMARK.getIso2LetterCode(), + countryUsages.getResults().get(0).getPublishingCountryCode()); + countryUsages = service.listCountryUsages( occurrenceDownload.getKey(), diff --git a/registry-persistence/src/main/java/org/gbif/registry/persistence/config/MyBatisConfiguration.java b/registry-persistence/src/main/java/org/gbif/registry/persistence/config/MyBatisConfiguration.java index e2e07639d..4ac8154ce 100644 --- a/registry-persistence/src/main/java/org/gbif/registry/persistence/config/MyBatisConfiguration.java +++ b/registry-persistence/src/main/java/org/gbif/registry/persistence/config/MyBatisConfiguration.java @@ -86,8 +86,6 @@ import java.net.URI; import java.util.UUID; -import org.gbif.registry.persistence.mapper.params.OrganizationOccurrenceDownloadDto; - import org.mybatis.spring.boot.autoconfigure.ConfigurationCustomizer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -128,10 +126,6 @@ ConfigurationCustomizer mybatisConfigCustomizer() { configuration.getTypeAliasRegistry().registerAlias("Metadata", Metadata.class); configuration.getTypeAliasRegistry().registerAlias("Download", Download.class); configuration.getTypeAliasRegistry().registerAlias("DownloadRequest", DownloadRequest.class); - configuration - .getTypeAliasRegistry() - .registerAlias( - "OrganizationOccurrenceDownloadDto", OrganizationOccurrenceDownloadDto.class); configuration .getTypeAliasRegistry() .registerAlias("PredicateDownloadRequest", PredicateDownloadRequest.class); diff --git a/registry-persistence/src/main/java/org/gbif/registry/persistence/mapper/DatasetOccurrenceDownloadMapper.java b/registry-persistence/src/main/java/org/gbif/registry/persistence/mapper/DatasetOccurrenceDownloadMapper.java index 1fa6eec71..ebf613b91 100644 --- a/registry-persistence/src/main/java/org/gbif/registry/persistence/mapper/DatasetOccurrenceDownloadMapper.java +++ b/registry-persistence/src/main/java/org/gbif/registry/persistence/mapper/DatasetOccurrenceDownloadMapper.java @@ -15,10 +15,13 @@ import org.gbif.api.model.common.paging.Pageable; import org.gbif.api.model.occurrence.DownloadType; +import org.gbif.api.model.registry.CountryOccurrenceDownloadUsage; import org.gbif.api.model.registry.DatasetOccurrenceDownloadUsage; +import org.gbif.api.model.registry.OrganizationOccurrenceDownloadUsage; +import org.gbif.api.vocabulary.CountryUsageSortField; import org.gbif.api.vocabulary.DatasetUsageSortField; +import org.gbif.api.vocabulary.OrganizationUsageSortField; import org.gbif.api.vocabulary.SortOrder; -import org.gbif.registry.persistence.mapper.params.OrganizationOccurrenceDownloadDto; import java.util.List; import java.util.Map; @@ -55,16 +58,22 @@ void createOrUpdateUsages( @Param("downloadKey") String downloadKey, @Param("citationMap") Map downloadDataset); - List listOrganizationsByDownload( + List listOrganizationsByDownload( @Param("downloadKey") String downloadKey, @Param("organizationTitle") String organizationTitle, + @Param("sortBy") OrganizationUsageSortField sortBy, + @Param("sortOrder") SortOrder sortOrder, @Nullable @Param("page") Pageable page); - int countOrganizationsByDownload( + List listCountriesByDownload( @Param("downloadKey") String downloadKey, - @Param("organizationTitle") String organizationTitle); + @Param("sortBy") CountryUsageSortField sortBy, + @Param("sortOrder") SortOrder sortOrder, + @Nullable @Param("page") Pageable page); - int countCountriesByDownload( + int countOrganizationsByDownload( @Param("downloadKey") String downloadKey, @Param("organizationTitle") String organizationTitle); + + int countCountriesByDownload(@Param("downloadKey") String downloadKey); } diff --git a/registry-persistence/src/main/java/org/gbif/registry/persistence/mapper/params/OrganizationOccurrenceDownloadDto.java b/registry-persistence/src/main/java/org/gbif/registry/persistence/mapper/params/OrganizationOccurrenceDownloadDto.java deleted file mode 100644 index ee5085a85..000000000 --- a/registry-persistence/src/main/java/org/gbif/registry/persistence/mapper/params/OrganizationOccurrenceDownloadDto.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.gbif.registry.persistence.mapper.params; - -import java.util.UUID; - -import lombok.Data; - -@Data -public class OrganizationOccurrenceDownloadDto { - - private String downloadKey; - private UUID datasetKey; - private UUID organizationKey; - private String organizationTitle; - private long numberRecords; - private String publishingCountryCode; -} diff --git a/registry-persistence/src/main/resources/org/gbif/registry/persistence/mapper/DatasetOccurrenceDownloadMapper.xml b/registry-persistence/src/main/resources/org/gbif/registry/persistence/mapper/DatasetOccurrenceDownloadMapper.xml index 60d100070..ec8f49f84 100644 --- a/registry-persistence/src/main/resources/org/gbif/registry/persistence/mapper/DatasetOccurrenceDownloadMapper.xml +++ b/registry-persistence/src/main/resources/org/gbif/registry/persistence/mapper/DatasetOccurrenceDownloadMapper.xml @@ -24,23 +24,24 @@ - + - - - - - + + + + + + + + + + dod.download_key,dod.dataset_key,dod.dataset_title,dod.dataset_doi,dod.dataset_citation,dod.number_records - - dod.download_key,dod.dataset_key,dod.number_records,o.key AS orgKey,o.title AS orgTitle,o.country - - - + SELECT o.key AS organizationKey, o.title AS organizationTitle, o.country AS publishingCountryCode, dod.download_key, + sum(dod.number_records) AS numberRecords FROM dataset_occurrence_download dod INNER JOIN occurrence_download od ON dod.download_key = od.key INNER JOIN dataset d on d.key = dod.dataset_key @@ -107,7 +110,75 @@ AND o.title = #{organizationTitle,jdbcType=VARCHAR} - ORDER BY od.created DESC, od.key + GROUP BY o.key, o.title, o.country, dod.download_key, od.created, od.key + ORDER BY + + + + o.title + + + o.country + + + numberRecords + + + + + + + DESC + + + ASC + + + + , + + od.created DESC, od.key, o.key + + LIMIT #{page.limit} OFFSET #{page.offset} + + + +