summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/kotlin/dev/dnpm/etl/processor/monitoring/Request.kt1
-rw-r--r--src/main/kotlin/dev/dnpm/etl/processor/services/RequestProcessor.kt10
-rw-r--r--src/main/kotlin/dev/dnpm/etl/processor/services/ResponseProcessor.kt2
-rw-r--r--src/main/resources/db/migration/mariadb/V0_16_3_1__ExpectedFollowUpCount.sql2
-rw-r--r--src/main/resources/db/migration/postgresql/V0_16_3_1__ExpectedFollowUpCount.sql2
-rw-r--r--src/test/kotlin/dev/dnpm/etl/processor/services/RequestProcessorTest.kt19
-rw-r--r--src/test/kotlin/dev/dnpm/etl/processor/services/ResponseProcessorTest.kt33
7 files changed, 62 insertions, 7 deletions
diff --git a/src/main/kotlin/dev/dnpm/etl/processor/monitoring/Request.kt b/src/main/kotlin/dev/dnpm/etl/processor/monitoring/Request.kt
index 67f450f..d62a503 100644
--- a/src/main/kotlin/dev/dnpm/etl/processor/monitoring/Request.kt
+++ b/src/main/kotlin/dev/dnpm/etl/processor/monitoring/Request.kt
@@ -54,6 +54,7 @@ data class Request(
@Embedded.Nullable var report: Report? = null,
@Column("submission_accepted") var submissionAccepted: Boolean = false,
@Column("followup_count") var followupCount: Int = 0,
+ @Column("expected_followup_count") var expectedFollowupCount: Int = 0,
) {
constructor(
uuid: RequestId,
diff --git a/src/main/kotlin/dev/dnpm/etl/processor/services/RequestProcessor.kt b/src/main/kotlin/dev/dnpm/etl/processor/services/RequestProcessor.kt
index 00e6b73..e545644 100644
--- a/src/main/kotlin/dev/dnpm/etl/processor/services/RequestProcessor.kt
+++ b/src/main/kotlin/dev/dnpm/etl/processor/services/RequestProcessor.kt
@@ -113,6 +113,10 @@ class RequestProcessor(
}
}
+ val maxFollowUpCount = this.requestService.allRequestsByPatientPseudonym(request.patientPseudonym())
+ .maxByOrNull { it.followupCount }
+ ?.followupCount ?: -1
+
if (
appConfigProperties.postInitialSubmissionBlock &&
hasSuccessfulInitialSubmission(request.patientPseudonym()) &&
@@ -128,7 +132,8 @@ class RequestProcessor(
submissionType = submissionType,
status = RequestStatus.BLOCKED_INITIAL,
tan = Tan(request.content.metadata?.transferTan.orEmpty()),
- followupCount = request.content.followUps?.size ?: 0,
+ followupCount = maxFollowUpCount,
+ expectedFollowupCount = request.content.followUps?.size ?: 0,
)
)
// Exit - no further processing
@@ -166,7 +171,8 @@ class RequestProcessor(
submissionType = submissionType,
status = RequestStatus.UNKNOWN,
tan = Tan(request.content.metadata?.transferTan.orEmpty()),
- followupCount = request.content.followUps?.size ?: 0,
+ followupCount = maxFollowUpCount,
+ expectedFollowupCount = request.content.followUps?.size ?: 0,
)
)
diff --git a/src/main/kotlin/dev/dnpm/etl/processor/services/ResponseProcessor.kt b/src/main/kotlin/dev/dnpm/etl/processor/services/ResponseProcessor.kt
index 947ec17..2818e00 100644
--- a/src/main/kotlin/dev/dnpm/etl/processor/services/ResponseProcessor.kt
+++ b/src/main/kotlin/dev/dnpm/etl/processor/services/ResponseProcessor.kt
@@ -53,10 +53,12 @@ class ResponseProcessor(
Report(
"Keine Probleme erkannt",
)
+ it.followupCount = it.expectedFollowupCount
}
RequestStatus.WARNING -> {
it.report = Report("Warnungen über mangelhafte Daten", event.body.orElse(""))
+ it.followupCount = it.expectedFollowupCount
}
RequestStatus.ERROR -> {
diff --git a/src/main/resources/db/migration/mariadb/V0_16_3_1__ExpectedFollowUpCount.sql b/src/main/resources/db/migration/mariadb/V0_16_3_1__ExpectedFollowUpCount.sql
new file mode 100644
index 0000000..ded8172
--- /dev/null
+++ b/src/main/resources/db/migration/mariadb/V0_16_3_1__ExpectedFollowUpCount.sql
@@ -0,0 +1,2 @@
+ALTER TABLE request ADD COLUMN expected_followup_count int DEFAULT 0;
+UPDATE request SET expected_followup_count = -1; \ No newline at end of file
diff --git a/src/main/resources/db/migration/postgresql/V0_16_3_1__ExpectedFollowUpCount.sql b/src/main/resources/db/migration/postgresql/V0_16_3_1__ExpectedFollowUpCount.sql
new file mode 100644
index 0000000..ded8172
--- /dev/null
+++ b/src/main/resources/db/migration/postgresql/V0_16_3_1__ExpectedFollowUpCount.sql
@@ -0,0 +1,2 @@
+ALTER TABLE request ADD COLUMN expected_followup_count int DEFAULT 0;
+UPDATE request SET expected_followup_count = -1; \ No newline at end of file
diff --git a/src/test/kotlin/dev/dnpm/etl/processor/services/RequestProcessorTest.kt b/src/test/kotlin/dev/dnpm/etl/processor/services/RequestProcessorTest.kt
index 0fea80a..7e771df 100644
--- a/src/test/kotlin/dev/dnpm/etl/processor/services/RequestProcessorTest.kt
+++ b/src/test/kotlin/dev/dnpm/etl/processor/services/RequestProcessorTest.kt
@@ -1294,7 +1294,8 @@ class RequestProcessorTest {
assertThat(requestCaptor.firstValue).isNotNull
assertThat(requestCaptor.firstValue.status).isEqualTo(RequestStatus.UNKNOWN)
assertThat(requestCaptor.firstValue.submissionType).isEqualTo(SubmissionType.FOLLOWUP)
- assertThat(requestCaptor.firstValue.followupCount).isEqualTo(1)
+ assertThat(requestCaptor.firstValue.followupCount).isEqualTo(0)
+ assertThat(requestCaptor.firstValue.expectedFollowupCount).isEqualTo(1)
val eventCaptor = argumentCaptor<ResponseEvent>()
verify(applicationEventPublisher, times(1)).publishEvent(eventCaptor.capture())
@@ -1415,7 +1416,8 @@ class RequestProcessorTest {
assertThat(requestCaptor.firstValue).isNotNull
assertThat(requestCaptor.firstValue.status).isEqualTo(RequestStatus.UNKNOWN)
assertThat(requestCaptor.firstValue.submissionType).isEqualTo(SubmissionType.FOLLOWUP)
- assertThat(requestCaptor.firstValue.followupCount).isEqualTo(1)
+ assertThat(requestCaptor.firstValue.followupCount).isEqualTo(0)
+ assertThat(requestCaptor.firstValue.expectedFollowupCount).isEqualTo(1)
val eventCaptor = argumentCaptor<ResponseEvent>()
verify(applicationEventPublisher, times(1)).publishEvent(eventCaptor.capture())
@@ -1522,6 +1524,8 @@ class RequestProcessorTest {
assertThat(requestCaptor.firstValue).isNotNull
assertThat(requestCaptor.firstValue.status).isEqualTo(RequestStatus.UNKNOWN)
assertThat(requestCaptor.firstValue.submissionType).isEqualTo(SubmissionType.FOLLOWUP)
+ assertThat(requestCaptor.firstValue.followupCount).isEqualTo(0)
+ assertThat(requestCaptor.firstValue.expectedFollowupCount).isEqualTo(1)
val eventCaptor = argumentCaptor<ResponseEvent>()
verify(applicationEventPublisher, times(1)).publishEvent(eventCaptor.capture())
@@ -1645,6 +1649,7 @@ class RequestProcessorTest {
assertThat(requestCaptor.firstValue.status).isEqualTo(RequestStatus.UNKNOWN)
assertThat(requestCaptor.firstValue.submissionType).isEqualTo(SubmissionType.ADDITION)
assertThat(requestCaptor.firstValue.followupCount).isEqualTo(1)
+ assertThat(requestCaptor.firstValue.expectedFollowupCount).isEqualTo(1)
val eventCaptor = argumentCaptor<ResponseEvent>()
verify(applicationEventPublisher, times(1)).publishEvent(eventCaptor.capture())
@@ -1786,7 +1791,8 @@ class RequestProcessorTest {
assertThat(requestCaptor.firstValue).isNotNull
assertThat(requestCaptor.firstValue.status).isEqualTo(RequestStatus.UNKNOWN)
assertThat(requestCaptor.firstValue.submissionType).isEqualTo(SubmissionType.FOLLOWUP)
- assertThat(requestCaptor.firstValue.followupCount).isEqualTo(2)
+ assertThat(requestCaptor.firstValue.followupCount).isEqualTo(1)
+ assertThat(requestCaptor.firstValue.expectedFollowupCount).isEqualTo(2)
val eventCaptor = argumentCaptor<ResponseEvent>()
verify(applicationEventPublisher, times(1)).publishEvent(eventCaptor.capture())
@@ -1910,6 +1916,7 @@ class RequestProcessorTest {
assertThat(requestCaptor.firstValue.status).isEqualTo(RequestStatus.UNKNOWN)
assertThat(requestCaptor.firstValue.submissionType).isEqualTo(SubmissionType.ADDITION)
assertThat(requestCaptor.firstValue.followupCount).isEqualTo(1)
+ assertThat(requestCaptor.firstValue.expectedFollowupCount).isEqualTo(1)
val eventCaptor = argumentCaptor<ResponseEvent>()
verify(applicationEventPublisher, times(1)).publishEvent(eventCaptor.capture())
@@ -2004,7 +2011,8 @@ class RequestProcessorTest {
assertThat(requestCaptor.firstValue).isNotNull
assertThat(requestCaptor.firstValue.status).isEqualTo(RequestStatus.UNKNOWN)
assertThat(requestCaptor.firstValue.submissionType).isEqualTo(SubmissionType.INITIAL)
- assertThat(requestCaptor.firstValue.followupCount).isEqualTo(1)
+ assertThat(requestCaptor.firstValue.followupCount).isEqualTo(0)
+ assertThat(requestCaptor.firstValue.expectedFollowupCount).isEqualTo(1)
val eventCaptor = argumentCaptor<ResponseEvent>()
verify(applicationEventPublisher, times(1)).publishEvent(eventCaptor.capture())
@@ -2104,7 +2112,8 @@ class RequestProcessorTest {
assertThat(requestCaptor.firstValue).isNotNull
assertThat(requestCaptor.firstValue.status).isEqualTo(RequestStatus.UNKNOWN)
assertThat(requestCaptor.firstValue.submissionType).isEqualTo(SubmissionType.ADDITION)
- assertThat(requestCaptor.firstValue.followupCount).isEqualTo(0)
+ assertThat(requestCaptor.firstValue.followupCount).isEqualTo(-1)
+ assertThat(requestCaptor.firstValue.expectedFollowupCount).isEqualTo(0)
val eventCaptor = argumentCaptor<ResponseEvent>()
verify(applicationEventPublisher, times(1)).publishEvent(eventCaptor.capture())
diff --git a/src/test/kotlin/dev/dnpm/etl/processor/services/ResponseProcessorTest.kt b/src/test/kotlin/dev/dnpm/etl/processor/services/ResponseProcessorTest.kt
index 441f3a9..c7a0af7 100644
--- a/src/test/kotlin/dev/dnpm/etl/processor/services/ResponseProcessorTest.kt
+++ b/src/test/kotlin/dev/dnpm/etl/processor/services/ResponseProcessorTest.kt
@@ -32,6 +32,7 @@ import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.extension.ExtendWith
import org.junit.jupiter.params.ParameterizedTest
+import org.junit.jupiter.params.provider.Arguments
import org.junit.jupiter.params.provider.MethodSource
import org.mockito.Mock
import org.mockito.junit.jupiter.MockitoExtension
@@ -115,6 +116,27 @@ class ResponseProcessorTest {
assertThat(captor.firstValue.status).isEqualTo(requestStatus)
}
+ @ParameterizedTest
+ @MethodSource("requestFollowUpCount")
+ fun shoulUpdateFollowUpCountFromExpectedFollowUpCountOnSuccess(requestStatus: RequestStatus, followUpCount: Int, expectedFollowUpCount: Int) {
+ doAnswer {
+ testRequest.followupCount = followUpCount
+ testRequest.expectedFollowupCount = expectedFollowUpCount
+ Optional.of(testRequest)
+ }.whenever(requestService).findByUuid(anyValueClass())
+
+ val event =
+ ResponseEvent(RequestId("TestID1234"), Instant.parse("2023-09-09T00:00:00Z"), requestStatus)
+
+ this.responseProcessor.handleResponseEvent(event)
+
+ val captor = argumentCaptor<Request>()
+ verify(requestService, times(1)).save(captor.capture())
+ assertThat(captor.firstValue).isNotNull
+ assertThat(captor.firstValue.status).isEqualTo(requestStatus)
+ assertThat(captor.firstValue.followupCount).isEqualTo(expectedFollowUpCount)
+ }
+
companion object {
@JvmStatic
@@ -126,5 +148,16 @@ class ResponseProcessorTest {
RequestStatus.DUPLICATION,
)
}
+
+ @JvmStatic
+ fun requestFollowUpCount(): Set<Arguments> {
+ return setOf(
+ Arguments.of(RequestStatus.SUCCESS, 1, 2),
+ Arguments.of(RequestStatus.WARNING, 1, 2),
+ Arguments.of(RequestStatus.ERROR, 1, 1),
+ Arguments.of(RequestStatus.DUPLICATION, 1, 1),
+ Arguments.of(RequestStatus.NO_CONSENT, 1, 1),
+ )
+ }
}
}