diff --git a/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/funders/FundersApiController.java b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/funders/FundersApiController.java index e1e16177..0bc8f9b9 100644 --- a/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/funders/FundersApiController.java +++ b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/funders/FundersApiController.java @@ -29,7 +29,7 @@ public class FundersApiController extends AbstractExporterController { @Autowired private FunderDao fDao; - @RequestMapping(value = "/funders", produces = { + @RequestMapping(value = "/funders/{page}/{size}", produces = { "application/json" }, method = RequestMethod.GET) @Operation(summary = "get basic information about funders", description = "basic information about funders: id, name, shortname, registration date") @@ -56,7 +56,7 @@ public class FundersApiController extends AbstractExporterController { return fDao.findFunder(id); } - @RequestMapping(value = "/funder/ids", produces = { + @RequestMapping(value = "/funders/{page}/{size}/ids", produces = { "application/json" }, method = RequestMethod.GET) @Operation(summary = "get the list of funder ids", description = "get the list of funder ids") diff --git a/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/funders/domain/db/FunderDbEntry.java b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/funders/domain/db/FunderDbEntry.java index 0d66ed8f..69c207da 100644 --- a/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/funders/domain/db/FunderDbEntry.java +++ b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/funders/domain/db/FunderDbEntry.java @@ -1,15 +1,30 @@ package eu.dnetlib.openaire.funders.domain.db; import java.io.Serializable; -import java.time.LocalDateTime; +import java.time.LocalDate; +import java.util.List; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; +import javax.persistence.Transient; + +import org.hibernate.annotations.Type; +import org.hibernate.annotations.TypeDef; +import org.hibernate.annotations.TypeDefs; + +import com.vladmihalcea.hibernate.type.array.StringArrayType; +import com.vladmihalcea.hibernate.type.json.JsonBinaryType; +import com.vladmihalcea.hibernate.type.json.JsonStringType; @Entity -@Table(name = "funders") +@Table(name = "funders_view") +@TypeDefs({ + @TypeDef(name = "string-array", typeClass = StringArrayType.class), + @TypeDef(name = "json", typeClass = JsonStringType.class), + @TypeDef(name = "jsonb", typeClass = JsonBinaryType.class) +}) public class FunderDbEntry implements Serializable { private static final long serialVersionUID = 1290088460508203016L; @@ -34,10 +49,17 @@ public class FunderDbEntry implements Serializable { private String country; @Column(name = "registrationdate") - private LocalDateTime registrationDate; + private LocalDate registrationDate; @Column(name = "registered") - private boolean registered; + private Boolean registered; + + @Type(type = "json") + @Column(name = "pids", columnDefinition = "jsonb") + private List pids; + + @Transient + private List aggregationDates; public String getId() { return id; @@ -87,20 +109,35 @@ public class FunderDbEntry implements Serializable { this.country = country; } - public LocalDateTime getRegistrationDate() { + public LocalDate getRegistrationDate() { return registrationDate; } - public void setRegistrationDate(final LocalDateTime registrationDate) { + public void setRegistrationDate(final LocalDate registrationDate) { this.registrationDate = registrationDate; } - public boolean isRegistered() { + public Boolean getRegistered() { return registered; } - public void setRegistered(final boolean registered) { + public void setRegistered(final Boolean registered) { this.registered = registered; } + public List getAggregationDates() { + return aggregationDates; + } + + public void setAggregationDates(final List aggregationDates) { + this.aggregationDates = aggregationDates; + } + + public List getPids() { + return pids; + } + + public void setPids(final List pids) { + this.pids = pids; + } } diff --git a/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/funders/domain/db/FunderPid.java b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/funders/domain/db/FunderPid.java new file mode 100644 index 00000000..bf058cb4 --- /dev/null +++ b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/funders/domain/db/FunderPid.java @@ -0,0 +1,29 @@ +package eu.dnetlib.openaire.funders.domain.db; + +import java.io.Serializable; + +public class FunderPid implements Serializable { + + private static final long serialVersionUID = 2145493560459874509L; + + private String type; + + private String value; + + public String getType() { + return type; + } + + public void setType(final String type) { + this.type = type; + } + + public String getValue() { + return value; + } + + public void setValue(final String value) { + this.value = value; + } + +} diff --git a/apps/dnet-exporter-api/src/main/resources/application.properties b/apps/dnet-exporter-api/src/main/resources/application.properties index 3aeb5b58..f5ec907b 100644 --- a/apps/dnet-exporter-api/src/main/resources/application.properties +++ b/apps/dnet-exporter-api/src/main/resources/application.properties @@ -27,7 +27,7 @@ openaire.exporter.enable.dsm = true openaire.exporter.enable.community = true openaire.exporter.enable.community.import = false openaire.exporter.enable.context = true -openaire.exporter.enable.funders = false +openaire.exporter.enable.funders = true openaire.exporter.enable.project = true openaire.exporter.enable.info = true diff --git a/apps/dnet-exporter-api/src/main/resources/sql/funders-schema.sql b/apps/dnet-exporter-api/src/main/resources/sql/funders-schema.sql index db0178bf..36fe9bd6 100644 --- a/apps/dnet-exporter-api/src/main/resources/sql/funders-schema.sql +++ b/apps/dnet-exporter-api/src/main/resources/sql/funders-schema.sql @@ -8,10 +8,13 @@ CREATE VIEW funders_view AS SELECT o.logourl AS logourl, o.country AS country, o.dateofcollection AS registrationdate, - o.registered_funder AS registered + o.registered_funder AS registered, + CASE WHEN count(pids.pid) = 0 THEN '[]'::jsonb ELSE jsonb_agg(jsonb_build_object('type', pids.issuertype,'value', pids.pid)) END AS pids FROM dsm_organizations o - JOIN dsm_service_organization so ON (o.id = so.organization) - JOIN dsm_services s ON (so.service = s.id) - JOIN projects p ON (p.collectedfrom = s.id) -GROUP BY o.id; \ No newline at end of file + JOIN dsm_service_organization so ON (o.id = so.organization) + JOIN dsm_services s ON (so.service = s.id) + JOIN projects p ON (p.collectedfrom = s.id) + LEFT OUTER JOIN dsm_organizationpids opids ON (o.id = opids.organization) + LEFT OUTER JOIN dsm_identities pids ON (opids.pid = pids.pid) +GROUP BY o.id;