new api to add ds and apis

This commit is contained in:
Michele Artini 2022-08-19 09:42:55 +02:00
parent ec666bf88e
commit fe3a9f7b4e
3 changed files with 82 additions and 0 deletions

View File

@ -34,6 +34,7 @@ import eu.dnetlib.openaire.dsm.domain.ApiDetailsResponse;
import eu.dnetlib.openaire.dsm.domain.DatasourceDetailResponse;
import eu.dnetlib.openaire.dsm.domain.DatasourceDetails;
import eu.dnetlib.openaire.dsm.domain.DatasourceDetailsUpdate;
import eu.dnetlib.openaire.dsm.domain.DatasourceDetailsWithApis;
import eu.dnetlib.openaire.dsm.domain.DatasourceResponse;
import eu.dnetlib.openaire.dsm.domain.DatasourceSnippetResponse;
import eu.dnetlib.openaire.dsm.domain.RequestFilter;
@ -279,6 +280,23 @@ public class DsmApiController extends AbstractExporterController {
dsmCore.save(datasource);
}
@RequestMapping(value = "/ds/addWithApis", method = RequestMethod.POST)
@ApiOperation(value = "add a new Datasource and its apis", notes = "add a new Datasource and its apis", tags = {
DS, W
})
@ApiResponses(value = {
@ApiResponse(code = 200, message = "OK"),
@ApiResponse(code = 400, message = "Malformed request", response = ErrorMessage[].class),
@ApiResponse(code = 500, message = "Unexpected error", response = ErrorMessage.class)
})
public void saveDsWithApis(@Valid @RequestBody final DatasourceDetailsWithApis d) throws DsmException {
if (d.getDatasource() == null) { throw new DsmException(HttpStatus.SC_BAD_REQUEST, "Datasource field is null"); }
if (dsmCore.exist(d.getDatasource())) { // TODO further check that the DS doesn't have any API
throw new DsmException(HttpStatus.SC_CONFLICT, String.format("cannot register, datasource already defined '%s'", d.getDatasource().getId()));
}
dsmCore.save(d);
}
@RequestMapping(value = "/ds/update", method = RequestMethod.POST)
@ApiOperation(value = "update Datasource details", notes = "update Datasource details", tags = {
DS, W

View File

@ -14,6 +14,8 @@ import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.transaction.Transactional;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.exception.ExceptionUtils;
@ -43,6 +45,7 @@ import eu.dnetlib.openaire.dsm.domain.ApiDetailsResponse;
import eu.dnetlib.openaire.dsm.domain.DatasourceDetailResponse;
import eu.dnetlib.openaire.dsm.domain.DatasourceDetails;
import eu.dnetlib.openaire.dsm.domain.DatasourceDetailsUpdate;
import eu.dnetlib.openaire.dsm.domain.DatasourceDetailsWithApis;
import eu.dnetlib.openaire.dsm.domain.DatasourceSnippetResponse;
import eu.dnetlib.openaire.dsm.domain.RegisteredDatasourceInfo;
import eu.dnetlib.openaire.dsm.domain.RequestFilter;
@ -174,12 +177,32 @@ public class DsmCore {
public void save(final DatasourceDetails d) throws DsmException {
try {
dsDao.saveDs(asDbEntry(d));
log.info("DS saved, " + d.getId());
} catch (final Throwable e) {
log.error(ExceptionUtils.getStackTrace(e));
throw e;
}
}
@Transactional
public void save(final DatasourceDetailsWithApis d) throws DsmException {
try {
dsDao.saveDs(asDbEntry(d.getDatasource()));
final List<ApiDetails> apis = d.getApis();
if (apis != null) {
for (final ApiDetails api : apis) {
api.setDatasource(d.getDatasource().getId());
addApi(api);
}
}
} catch (
final Throwable e) {
log.error(ExceptionUtils.getStackTrace(e));
throw e;
}
}
public void updateDatasource(final DatasourceDetailsUpdate d) throws DsmException, DsmNotFoundException {
try {
// initialize with current values from DB
@ -235,6 +258,7 @@ public class DsmCore {
log.info(String.format("missing api id, created '%s'", api.getId()));
}
dsDao.addApi(asDbEntry(api));
log.info("API saved, id: " + api.getId());
}
public void deleteApi(final String apiId) throws DsmForbiddenException, DsmNotFoundException {

View File

@ -0,0 +1,40 @@
package eu.dnetlib.openaire.dsm.domain;
import java.util.ArrayList;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
* Created by claudio on 12/09/16.
*/
@JsonAutoDetect
@ApiModel(value = "Datasource model with apis", description = "provides information about the datasource and its apis")
public class DatasourceDetailsWithApis {
@ApiModelProperty(position = 1)
private DatasourceDetails datasource;
public DatasourceDetails getDatasource() {
return datasource;
}
public void setDatasource(final DatasourceDetails datasource) {
this.datasource = datasource;
}
@ApiModelProperty(position = 2)
private List<ApiDetails> apis = new ArrayList<>();
public List<ApiDetails> getApis() {
return apis;
}
public void setApis(final List<ApiDetails> apis) {
this.apis = apis;
}
}