Skip to content
This repository was archived by the owner on May 16, 2023. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 12 additions & 6 deletions src/main/java/app/coronawarn/testresult/TestResultController.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,11 @@

package app.coronawarn.testresult;

import app.coronawarn.testresult.model.QuickTestResult;
import app.coronawarn.testresult.model.QuickTestResultList;
import app.coronawarn.testresult.model.TestResult;
import app.coronawarn.testresult.model.TestResultList;
import app.coronawarn.testresult.model.TestResultRequest;
import app.coronawarn.testresult.model.TestResultResponse;
import app.coronawarn.testresult.service.HashingService;
import app.coronawarn.testresult.service.TestResultService;
import io.swagger.v3.oas.annotations.Operation;
import javax.validation.Valid;
Expand Down Expand Up @@ -72,6 +70,7 @@ public ResponseEntity<TestResultResponse> result(

TestResult result = testResultService.getOrCreate(request.getId(), false, null);
return ResponseEntity.ok(new TestResultResponse()
.setLabId(result.getLabId())
.setTestResult(result.getResult(), result.getSc())
);
}
Expand All @@ -94,7 +93,11 @@ public ResponseEntity<?> results(
@RequestBody @NotNull @Valid TestResultList list
) {
log.info("Received {} test results to insert or update from lab.", list.getTestResults().size());
list.getTestResults().forEach(testResultService::createOrUpdate);

list.getTestResults().stream()
.map(tr -> tr.setLabId(list.getLabId()))
.forEach(testResultService::createOrUpdate);

return ResponseEntity.noContent().build();
}

Expand All @@ -118,6 +121,7 @@ public ResponseEntity<TestResultResponse> quickTestResult(
log.info("Received test result request from Quicktest.");
TestResult result = testResultService.getOrCreate(request.getId(), true, request.getSc());
return ResponseEntity.ok(new TestResultResponse()
.setLabId(result.getLabId())
.setTestResult(result.getResult()));
}

Expand All @@ -139,9 +143,11 @@ public ResponseEntity<?> quicktestResults(
@RequestBody @NotNull @Valid QuickTestResultList list
) {
log.info("Received {} test result to insert or update from Quicktests. ", list.getTestResults().size());
for (QuickTestResult result: list.getTestResults()) {
testResultService.createOrUpdate(testResultService.convertQuickTest(result));
}

list.getTestResults().stream()
.map(tr -> testResultService.convertQuickTest(tr, list.getLabId()))
.forEach(testResultService::createOrUpdate);

return ResponseEntity.noContent().build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,9 @@ public class TestResultEntity {
@Column(name = "result_date")
private LocalDateTime resultDate;

@Column(name = "lab_id")
private String labId;

public TestResultEntity setResult(Integer result) {
this.result = result;
return this;
Expand All @@ -83,6 +86,11 @@ public TestResultEntity setResultDate(LocalDateTime resultDate) {
return this;
}

public TestResultEntity setLabId(String labId) {
this.labId = labId;
return this;
}

public enum Result {
PENDING, NEGATIVE, POSITIVE, INVALID, REDEEMED,
QUICK_PENDING, QUICK_NEGATIVE, QUICK_POSITIVE, QUICK_INVALID, QUICK_REDEEMED
Expand Down
21 changes: 5 additions & 16 deletions src/main/java/app/coronawarn/testresult/model/QuickTestResult.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,9 @@
import javax.validation.constraints.Pattern;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;

/**
* Model of the test result.
Expand All @@ -38,15 +40,17 @@
description = "The test result model."
)
@Getter
@Setter
@ToString
@EqualsAndHashCode
@Accessors(chain = true)
public class QuickTestResult {

/**
* Hash (SHA256) of test result id (aka QR-Code, GUID) encoded as hex string.
*/
@NotBlank
@Pattern(regexp = "^([A-Fa-f0-9]{2}){32}$")
@Pattern(regexp = "^[XxA-Fa-f0-9]([A-Fa-f0-9]{63})$")
private String id;

/**
Expand All @@ -66,19 +70,4 @@ public class QuickTestResult {
* Timestamp of the SampleCollection (sc).
*/
private Long sc;

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

public QuickTestResult setResult(Integer result) {
this.result = result;
return this;
}

public QuickTestResult setSampleCollection(Long sc) {
this.sc = sc;
return this;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,17 @@

package app.coronawarn.testresult.model;

import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.v3.oas.annotations.media.Schema;
import java.util.List;
import javax.validation.Valid;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;

/**
* Model of the test result list.
Expand All @@ -37,8 +40,10 @@
description = "The test result list model."
)
@Getter
@Setter
@ToString
@EqualsAndHashCode
@Accessors(chain = true)
public class QuickTestResultList {

/**
Expand All @@ -48,8 +53,9 @@ public class QuickTestResultList {
@NotEmpty
private List<@Valid QuickTestResult> testResults;

public QuickTestResultList setTestResults(List<QuickTestResult> testResults) {
this.testResults = testResults;
return this;
}
/**
* The labId of the uploader.
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
private String labId;
}
24 changes: 8 additions & 16 deletions src/main/java/app/coronawarn/testresult/model/TestResult.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@

package app.coronawarn.testresult.model;

import com.fasterxml.jackson.annotation.JsonIgnore;
import io.swagger.v3.oas.annotations.media.Schema;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
Expand All @@ -29,8 +30,9 @@
import javax.validation.constraints.Pattern;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NonNull;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;

/**
* Model of the test result.
Expand All @@ -39,15 +41,17 @@
description = "The test result model."
)
@Getter
@Setter
@ToString
@EqualsAndHashCode
@Accessors(chain = true)
public class TestResult {

/**
* Hash (SHA256) of test result id (aka QR-Code, GUID) encoded as hex string.
*/
@NotBlank
@Pattern(regexp = "^([A-Fa-f0-9]{2}){32}$")
@Pattern(regexp = "^[XxA-Fa-f0-9]([A-Fa-f0-9]{63})$")
private String id;

/**
Expand All @@ -72,18 +76,6 @@ public class TestResult {
*/
private Long sc;

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

public TestResult setResult(Integer result) {
this.result = result;
return this;
}

public TestResult setSampleCollection(Long sc) {
this.sc = sc;
return this;
}
@JsonIgnore
private String labId;
}
15 changes: 11 additions & 4 deletions src/main/java/app/coronawarn/testresult/model/TestResultList.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,17 @@

package app.coronawarn.testresult.model;

import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.v3.oas.annotations.media.Schema;
import java.util.List;
import javax.validation.Valid;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;

/**
* Model of the test result list.
Expand All @@ -37,8 +40,10 @@
description = "The test result list model."
)
@Getter
@Setter
@ToString
@EqualsAndHashCode
@Accessors(chain = true)
public class TestResultList {

/**
Expand All @@ -48,8 +53,10 @@ public class TestResultList {
@NotEmpty
private List<@Valid TestResult> testResults;

public TestResultList setTestResults(List<TestResult> testResults) {
this.testResults = testResults;
return this;
}
/**
* The labId of the uploader.
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
private String labId;

}
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public class TestResultRequest {
* Hash (SHA256) of test result id (aka QR-Code, GUID) encoded as hex string.
*/
@NotBlank
@Pattern(regexp = "^([A-Fa-f0-9]{2}){32}$")
@Pattern(regexp = "^[XxA-Fa-f0-9]([A-Fa-f0-9]{63})$")
private String id;

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,14 @@

import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.v3.oas.annotations.media.Schema;
import javax.annotation.Nullable;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;

/**
* Response model of the test result.
Expand All @@ -41,6 +42,7 @@
@ToString
@EqualsAndHashCode
@JsonInclude(JsonInclude.Include.NON_NULL)
@Accessors(chain = true)
public class TestResultResponse {

/**
Expand All @@ -65,6 +67,12 @@ public class TestResultResponse {
*/
private Long sc;

/**
* LabId of the lab that executed the test.
*/
@Setter
private String labId;

/**
* Default constructor with sc null.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,8 @@ public TestResult toModel(TestResultEntity entity) {
return new TestResult()
.setId(entity.getResultId())
.setResult(entity.getResult())
.setSampleCollection(entity.getResultDate().atZone(ZoneId.of("UTC")).toEpochSecond());
.setSc(entity.getResultDate().atZone(ZoneId.of("UTC")).toEpochSecond())
.setLabId(entity.getLabId());
}

/**
Expand All @@ -65,12 +66,13 @@ public TestResult toModel(TestResultEntity entity) {
*/
public TestResultEntity toEntity(TestResult model) {
if (model.getSc() == null) {
model.setSampleCollection(LocalDateTime.now().toEpochSecond(ZoneOffset.UTC));
model.setSc(LocalDateTime.now().toEpochSecond(ZoneOffset.UTC));
}
return new TestResultEntity()
.setResult(model.getResult())
.setResultId(model.getId())
.setResultDate(LocalDateTime.ofEpochSecond(model.getSc(), 0, ZoneOffset.UTC));
.setResultDate(LocalDateTime.ofEpochSecond(model.getSc(), 0, ZoneOffset.UTC))
.setLabId(model.getLabId());
}

/**
Expand All @@ -97,6 +99,7 @@ public TestResult createOrUpdate(final TestResult result) {
}
entity.setResult(result.getResult())
.setResultDate(sc);
entity.setLabId(result.getLabId());
entity = testResultRepository.save(entity);
}
return toModel(entity);
Expand Down Expand Up @@ -147,9 +150,10 @@ public TestResult getOrCreate(final String id, boolean quicktest, Long sc) {
* @param quickTestResult the Result to convert
* @return the converted test result
*/
public TestResult convertQuickTest(QuickTestResult quickTestResult) {
public TestResult convertQuickTest(QuickTestResult quickTestResult, String labId) {
TestResult testResult = new TestResult();
testResult.setResult(quickTestResult.getResult());
testResult.setLabId(labId);
testResult.setId(hashingService.sha256Hash(quickTestResult.getId()));
return testResult;
}
Expand Down
3 changes: 3 additions & 0 deletions src/main/resources/db/changelog.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,6 @@ databaseChangeLog:
- include:
file: changelog/v002-revert-test-result-result-nullable.yml
relativeToChangelogFile: true
- include:
file: changelog/v003-add-labid-column.yml
relativeToChangelogFile: true
12 changes: 12 additions & 0 deletions src/main/resources/db/changelog/v003-add-labid-column.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
databaseChangeLog:
- changeSet:
id: add-lab-id-column
author: f11h
changes:
- addColumn:
tableName: test_result
columns:
name: lab_id
type: varchar(64)
constraints:
nullable: true
Loading