From 2887e1c9b13dc160560640b93f1041b19f07aae5 Mon Sep 17 00:00:00 2001 From: "michele.artini" Date: Tue, 27 Feb 2024 12:05:20 +0100 Subject: [PATCH] new api to set deposit info --- .../community/CommunityApiController.java | 22 +++++++++++ .../openaire/community/CommunityService.java | 12 ++++++ .../community/model/DepositionInfo.java | 39 +++++++++++++++++++ 3 files changed, 73 insertions(+) create mode 100644 apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/model/DepositionInfo.java diff --git a/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityApiController.java b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityApiController.java index 3fec3961..a2ab25f0 100644 --- a/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityApiController.java +++ b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityApiController.java @@ -27,6 +27,7 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import eu.dnetlib.openaire.common.AbstractExporterController; +import eu.dnetlib.openaire.community.model.DepositionInfo; import eu.dnetlib.openaire.exporter.exceptions.CommunityException; import eu.dnetlib.openaire.exporter.exceptions.ResourceNotFoundException; import eu.dnetlib.openaire.exporter.model.community.CommunityContentprovider; @@ -328,6 +329,27 @@ public class CommunityApiController extends AbstractExporterController { } } + @PostMapping("/community/{id}/datasources/deposit") + @Operation(summary = "associate a content provider to the community", description = "associate a content provider to the community", tags = { + C_CP, W + }) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "OK"), + @ApiResponse(responseCode = "404", description = "not found"), + @ApiResponse(responseCode = "500", description = "unexpected error") + }) + public CommunityContentprovider addCommunityContentprovider( + @PathVariable final String id, + @RequestBody final DepositionInfo info) throws CommunityException { + try { + return communityService.updateCommunityDatasourcesDeposit(id, info.getOpenaireId(), info.getDeposit(), info.getMessage()); + } catch (final ResourceNotFoundException e) { + throw e; + } catch (final Throwable e) { + throw new CommunityException(e); + } + } + @DeleteMapping({ "/community/{id}/contentproviders", "/community/{id}/datasources" }) @Operation(summary = "remove the association between a content provider and the community", description = "remove the association between a content provider and the community", tags = { C_CP, W diff --git a/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityService.java b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityService.java index 74e386aa..6bb64753 100644 --- a/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityService.java +++ b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityService.java @@ -219,6 +219,18 @@ public class CommunityService { .collect(Collectors.toList()); } + @Transactional + public CommunityContentprovider updateCommunityDatasourcesDeposit(final String id, final String dsId, final Boolean deposit, final String message) { + return dbDatasourceRepository.findById(new DbDatasourcePK(id, dsId)) + .map(ds -> { + ds.setDeposit(deposit != null ? deposit : false); + ds.setMessage(message); + return ds; + }) + .map(CommunityMappingUtils::toCommunityContentprovider) + .orElseThrow(() -> new ResourceNotFoundException("Community and/or Datasource not found")); + } + @Transactional public void addCommunityDatasources(final String id, final CommunityContentprovider... contentproviders) { final List list = Arrays.stream(contentproviders) diff --git a/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/model/DepositionInfo.java b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/model/DepositionInfo.java new file mode 100644 index 00000000..476ab549 --- /dev/null +++ b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/model/DepositionInfo.java @@ -0,0 +1,39 @@ +package eu.dnetlib.openaire.community.model; + +import java.io.Serializable; + +public class DepositionInfo implements Serializable { + + private static final long serialVersionUID = 7538663287451167904L; + + private String openaireId; + + private Boolean deposit; + + private String message; + + public String getOpenaireId() { + return openaireId; + } + + public void setOpenaireId(final String openaireId) { + this.openaireId = openaireId; + } + + public Boolean getDeposit() { + return deposit; + } + + public void setDeposit(final Boolean deposit) { + this.deposit = deposit; + } + + public String getMessage() { + return message; + } + + public void setMessage(final String message) { + this.message = message; + } + +}