Skip to content

Commit

Permalink
Merge pull request #44 from elixir-europe/biosamples-receipt
Browse files Browse the repository at this point in the history
BioSamples response as per receipt format
  • Loading branch information
bedroesb authored Sep 16, 2024
2 parents 259eb9a + bf80c49 commit b901090
Show file tree
Hide file tree
Showing 4 changed files with 119 additions and 17 deletions.
2 changes: 1 addition & 1 deletion repository-services/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ Change to the correct directory:
cd repository-test-services
```

Use docker compose to deploy both services simultaniously:
Use docker compose to deploy both services simultaneously:

```sh
docker compose up
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@
import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
import static org.springframework.http.MediaType.APPLICATION_XML_VALUE;

import com.elixir.biohackaton.ISAToSRA.biosamples.receipt.Receipt;
import com.elixir.biohackaton.ISAToSRA.biosamples.receipt.Receipt.Accession;
import com.elixir.biohackaton.ISAToSRA.biosamples.receipt.Receipt;
import com.elixir.biohackaton.ISAToSRA.biosamples.service.BioSamplesSubmitter;
import com.elixir.biohackaton.ISAToSRA.model.IsaJson;
import com.elixir.biohackaton.ISAToSRA.model.Study;
Expand All @@ -12,6 +15,9 @@
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
Expand All @@ -23,22 +29,22 @@ public class BioSampleSubmissionController {
@Autowired private ObjectMapper objectMapper;

@ApiResponses(
value = {
@ApiResponse(responseCode = "200", description = "Ok"),
@ApiResponse(responseCode = "401", description = "Unauthorized"),
@ApiResponse(responseCode = "403", description = "Forbidden"),
@ApiResponse(responseCode = "400", description = "Bad request"),
@ApiResponse(responseCode = "408", description = "Request Timeout"),
@ApiResponse(responseCode = "415", description = "Unsupported media type")
})
value = {
@ApiResponse(responseCode = "200", description = "Ok"),
@ApiResponse(responseCode = "401", description = "Unauthorized"),
@ApiResponse(responseCode = "403", description = "Forbidden"),
@ApiResponse(responseCode = "400", description = "Bad request"),
@ApiResponse(responseCode = "408", description = "Request Timeout"),
@ApiResponse(responseCode = "415", description = "Unsupported media type")
})
@CrossOrigin(origins = "http://localhost:8000")
@PostMapping(
value = "/submit",
consumes = {APPLICATION_JSON_VALUE, APPLICATION_XML_VALUE})
value = "/submit",
consumes = {APPLICATION_JSON_VALUE, APPLICATION_XML_VALUE})
public String performSubmissionToBioSamplesAndEna(
@RequestBody final String submissionPayload,
@RequestParam(value = "webinjwt") String webinJwt)
throws Exception {
@RequestBody final String submissionPayload,
@RequestParam(value = "webinjwt") String webinJwt)
throws Exception {
String webinToken;

objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
Expand All @@ -52,9 +58,14 @@ public String performSubmissionToBioSamplesAndEna(
final IsaJson isaJson = this.objectMapper.readValue(submissionPayload, IsaJson.class);
final List<Study> studies = getStudies(isaJson);

this.bioSamplesSubmitter.createBioSamples(studies, webinToken);
final Map<String, String> accessionsMap = this.bioSamplesSubmitter.createBioSamples(studies, webinToken);
final Receipt repositoryData = new Receipt();

repositoryData.setTargetRepository("biosamples");
repositoryData.setAccessions(accessionsMap.values().stream()
.map(value -> new Accession(value, null)).collect(Collectors.toList()));

return this.objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(isaJson);
return this.objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(repositoryData);
}

public List<Study> getStudies(final IsaJson isaJson) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
package com.elixir.biohackaton.ISAToSRA.biosamples.receipt;

import lombok.Getter;

import java.util.List;

@Getter
public class Receipt {
private String targetRepository;
private List<Accession> accessions;
private List<Error> errors;
private List<Info> info;

public void setTargetRepository(String targetRepository) {
this.targetRepository = targetRepository;
}

public void setAccessions(List<Accession> accessions) {
this.accessions = accessions;
}

public void setErrors(List<Error> errors) {
this.errors = errors;
}

public void setInfo(List<Info> info) {
this.info = info;
}

@Getter
public static class Accession {
private String id;
private String data;

public Accession(String id, String data) {
this.id = id;
this.data = data;
}

public void setId(String id) {
this.id = id;
}

public void setData(String data) {
this.data = data;
}
}

// Error class
@Getter
static class Error {
private String code;
private String message;

public Error(String code, String message) {
this.code = code;
this.message = message;
}

public void setCode(String code) {
this.code = code;
}

public void setMessage(String message) {
this.message = message;
}
}

// Info class
@Getter
static class Info {
// Define fields, constructor, getters, and setters
private String key;
private String value;

public Info(String key, String value) {
this.key = key;
this.value = value;
}

public void setKey(String key) {
this.key = key;
}

public void setValue(String value) {
this.value = value;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,9 @@ private Map<Integer, String> mapExperiments(
.addText(otherMaterial.getName());
experimentElement
.addElement("STUDY_REF")
.addAttribute("refname", study.getTitle() + "-" + randomSubmissionIdentifier);
.addAttribute(
"refname",
study.getTitle() + "-" + randomSubmissionIdentifier);

final Element designElement =
experimentElement.addElement("DESIGN");
Expand Down

0 comments on commit b901090

Please sign in to comment.