mirror of
https://github.com/pcvolkmer/etl-processor.git
synced 2025-04-19 17:26:51 +00:00
refactor: use Fingerprint type instead of plain String
This commit is contained in:
parent
5985327219
commit
9a6a0c6138
@ -20,6 +20,7 @@
|
||||
package dev.dnpm.etl.processor.monitoring
|
||||
|
||||
import dev.dnpm.etl.processor.AbstractTestcontainerTest
|
||||
import dev.dnpm.etl.processor.Fingerprint
|
||||
import dev.dnpm.etl.processor.output.MtbFileSender
|
||||
import org.junit.jupiter.api.BeforeEach
|
||||
import org.junit.jupiter.api.Test
|
||||
@ -63,7 +64,7 @@ class RequestRepositoryTest : AbstractTestcontainerTest() {
|
||||
RequestId.randomUUID().toString(),
|
||||
"TEST_12345678901",
|
||||
"P1",
|
||||
"0123456789abcdef1",
|
||||
Fingerprint("0123456789abcdef1"),
|
||||
RequestType.MTB_FILE,
|
||||
RequestStatus.WARNING,
|
||||
Instant.parse("2023-07-07T00:00:00Z")
|
||||
|
@ -20,6 +20,7 @@
|
||||
package dev.dnpm.etl.processor.services
|
||||
|
||||
import dev.dnpm.etl.processor.AbstractTestcontainerTest
|
||||
import dev.dnpm.etl.processor.Fingerprint
|
||||
import dev.dnpm.etl.processor.monitoring.Request
|
||||
import dev.dnpm.etl.processor.monitoring.RequestRepository
|
||||
import dev.dnpm.etl.processor.monitoring.RequestStatus
|
||||
@ -79,7 +80,7 @@ class RequestServiceIntegrationTest : AbstractTestcontainerTest() {
|
||||
UUID.randomUUID().toString(),
|
||||
"TEST_12345678901",
|
||||
"P1",
|
||||
"0123456789abcdef1",
|
||||
Fingerprint("0123456789abcdef1"),
|
||||
RequestType.MTB_FILE,
|
||||
RequestStatus.SUCCESS,
|
||||
Instant.parse("2023-07-07T02:00:00Z")
|
||||
@ -89,7 +90,7 @@ class RequestServiceIntegrationTest : AbstractTestcontainerTest() {
|
||||
UUID.randomUUID().toString(),
|
||||
"TEST_12345678902",
|
||||
"P2",
|
||||
"0123456789abcdef2",
|
||||
Fingerprint("0123456789abcdef2"),
|
||||
RequestType.MTB_FILE,
|
||||
RequestStatus.WARNING,
|
||||
Instant.parse("2023-08-08T00:00:00Z")
|
||||
@ -99,7 +100,7 @@ class RequestServiceIntegrationTest : AbstractTestcontainerTest() {
|
||||
UUID.randomUUID().toString(),
|
||||
"TEST_12345678901",
|
||||
"P2",
|
||||
"0123456789abcdee1",
|
||||
Fingerprint("0123456789abcdee1"),
|
||||
RequestType.DELETE,
|
||||
RequestStatus.SUCCESS,
|
||||
Instant.parse("2023-08-08T02:00:00Z")
|
||||
@ -115,8 +116,8 @@ class RequestServiceIntegrationTest : AbstractTestcontainerTest() {
|
||||
val actual = requestService.allRequestsByPatientPseudonym("TEST_12345678901")
|
||||
|
||||
assertThat(actual).hasSize(2)
|
||||
assertThat(actual[0].fingerprint).isEqualTo("0123456789abcdee1")
|
||||
assertThat(actual[1].fingerprint).isEqualTo("0123456789abcdef1")
|
||||
assertThat(actual[0].fingerprint).isEqualTo(Fingerprint("0123456789abcdee1"))
|
||||
assertThat(actual[1].fingerprint).isEqualTo(Fingerprint("0123456789abcdef1"))
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -135,7 +136,7 @@ class RequestServiceIntegrationTest : AbstractTestcontainerTest() {
|
||||
val actual = requestService.lastMtbFileRequestForPatientPseudonym("TEST_12345678901")
|
||||
|
||||
assertThat(actual).isNotNull
|
||||
assertThat(actual?.fingerprint).isEqualTo("0123456789abcdef1")
|
||||
assertThat(actual?.fingerprint).isEqualTo(Fingerprint("0123456789abcdef1"))
|
||||
}
|
||||
|
||||
}
|
@ -44,6 +44,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties
|
||||
import org.springframework.context.annotation.Bean
|
||||
import org.springframework.context.annotation.Configuration
|
||||
import org.springframework.data.jdbc.repository.config.AbstractJdbcConfiguration
|
||||
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory
|
||||
import org.springframework.retry.RetryCallback
|
||||
import org.springframework.retry.RetryContext
|
||||
@ -274,5 +275,9 @@ class AppConfiguration {
|
||||
return GPasConnectionCheckService(restTemplate, gPasConfigProperties, connectionCheckUpdateProducer)
|
||||
}
|
||||
|
||||
@Bean
|
||||
fun jdbcConfiguration(): AbstractJdbcConfiguration {
|
||||
return AppJdbcConfiguration()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,25 @@
|
||||
package dev.dnpm.etl.processor.config
|
||||
|
||||
import dev.dnpm.etl.processor.Fingerprint
|
||||
import org.springframework.context.annotation.Configuration
|
||||
import org.springframework.core.convert.converter.Converter
|
||||
import org.springframework.data.jdbc.repository.config.AbstractJdbcConfiguration
|
||||
|
||||
@Configuration
|
||||
class AppJdbcConfiguration : AbstractJdbcConfiguration() {
|
||||
override fun userConverters(): MutableList<*> {
|
||||
return mutableListOf(StringToFingerprintConverter(), FingerprintToStringConverter())
|
||||
}
|
||||
}
|
||||
|
||||
class StringToFingerprintConverter : Converter<String, Fingerprint> {
|
||||
override fun convert(source: String): Fingerprint {
|
||||
return Fingerprint(source)
|
||||
}
|
||||
}
|
||||
|
||||
class FingerprintToStringConverter : Converter<Fingerprint, String> {
|
||||
override fun convert(source: Fingerprint): String {
|
||||
return source.value
|
||||
}
|
||||
}
|
@ -19,10 +19,12 @@
|
||||
|
||||
package dev.dnpm.etl.processor.monitoring
|
||||
|
||||
import dev.dnpm.etl.processor.Fingerprint
|
||||
import org.springframework.data.annotation.Id
|
||||
import org.springframework.data.domain.Page
|
||||
import org.springframework.data.domain.Pageable
|
||||
import org.springframework.data.jdbc.repository.query.Query
|
||||
import org.springframework.data.relational.core.mapping.Column
|
||||
import org.springframework.data.relational.core.mapping.Embedded
|
||||
import org.springframework.data.relational.core.mapping.Table
|
||||
import org.springframework.data.repository.CrudRepository
|
||||
@ -38,7 +40,8 @@ data class Request(
|
||||
val uuid: String = RequestId.randomUUID().toString(),
|
||||
val patientId: String,
|
||||
val pid: String,
|
||||
val fingerprint: String,
|
||||
@Column("fingerprint")
|
||||
val fingerprint: Fingerprint,
|
||||
val type: RequestType,
|
||||
var status: RequestStatus,
|
||||
var processedAt: Instant = Instant.now(),
|
||||
@ -48,7 +51,7 @@ data class Request(
|
||||
uuid: String,
|
||||
patientId: String,
|
||||
pid: String,
|
||||
fingerprint: String,
|
||||
fingerprint: Fingerprint,
|
||||
type: RequestType,
|
||||
status: RequestStatus
|
||||
) :
|
||||
@ -58,7 +61,7 @@ data class Request(
|
||||
uuid: String,
|
||||
patientId: String,
|
||||
pid: String,
|
||||
fingerprint: String,
|
||||
fingerprint: Fingerprint,
|
||||
type: RequestType,
|
||||
status: RequestStatus,
|
||||
processedAt: Instant
|
||||
|
@ -21,6 +21,7 @@ package dev.dnpm.etl.processor.services
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper
|
||||
import de.ukw.ccc.bwhc.dto.MtbFile
|
||||
import dev.dnpm.etl.processor.Fingerprint
|
||||
import dev.dnpm.etl.processor.config.AppConfigProperties
|
||||
import dev.dnpm.etl.processor.monitoring.Report
|
||||
import dev.dnpm.etl.processor.monitoring.Request
|
||||
@ -146,7 +147,7 @@ class RequestProcessor(
|
||||
uuid = requestId,
|
||||
patientId = "???",
|
||||
pid = patientId,
|
||||
fingerprint = "",
|
||||
fingerprint = Fingerprint.empty(),
|
||||
status = RequestStatus.ERROR,
|
||||
type = RequestType.DELETE,
|
||||
report = Report("Fehler bei der Pseudonymisierung")
|
||||
@ -155,14 +156,16 @@ class RequestProcessor(
|
||||
}
|
||||
}
|
||||
|
||||
private fun fingerprint(mtbFile: MtbFile): String {
|
||||
private fun fingerprint(mtbFile: MtbFile): Fingerprint {
|
||||
return fingerprint(objectMapper.writeValueAsString(mtbFile))
|
||||
}
|
||||
|
||||
private fun fingerprint(s: String): String {
|
||||
return Base32().encodeAsString(DigestUtils.sha256(s))
|
||||
.replace("=", "")
|
||||
.lowercase()
|
||||
private fun fingerprint(s: String): Fingerprint {
|
||||
return Fingerprint(
|
||||
Base32().encodeAsString(DigestUtils.sha256(s))
|
||||
.replace("=", "")
|
||||
.lowercase()
|
||||
)
|
||||
}
|
||||
|
||||
}
|
11
src/main/kotlin/dev/dnpm/etl/processor/types.kt
Normal file
11
src/main/kotlin/dev/dnpm/etl/processor/types.kt
Normal file
@ -0,0 +1,11 @@
|
||||
package dev.dnpm.etl.processor
|
||||
|
||||
class Fingerprint(val value: String) {
|
||||
override fun hashCode() = value.hashCode()
|
||||
|
||||
override fun equals(other: Any?) = other is Fingerprint && other.value == value
|
||||
|
||||
companion object {
|
||||
fun empty() = Fingerprint("")
|
||||
}
|
||||
}
|
@ -21,6 +21,7 @@ package dev.dnpm.etl.processor.services
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper
|
||||
import de.ukw.ccc.bwhc.dto.*
|
||||
import dev.dnpm.etl.processor.Fingerprint
|
||||
import dev.dnpm.etl.processor.config.AppConfigProperties
|
||||
import dev.dnpm.etl.processor.monitoring.*
|
||||
import dev.dnpm.etl.processor.output.MtbFileSender
|
||||
@ -90,7 +91,7 @@ class RequestProcessorTest {
|
||||
UUID.randomUUID().toString(),
|
||||
"TEST_12345678901",
|
||||
"P1",
|
||||
"zdlzv5s5ydmd4ktw2v5piohegc4jcyrm6j66bq6tv2uxuerndmga",
|
||||
Fingerprint("zdlzv5s5ydmd4ktw2v5piohegc4jcyrm6j66bq6tv2uxuerndmga"),
|
||||
RequestType.MTB_FILE,
|
||||
RequestStatus.SUCCESS,
|
||||
Instant.parse("2023-08-08T02:00:00Z")
|
||||
@ -149,7 +150,7 @@ class RequestProcessorTest {
|
||||
UUID.randomUUID().toString(),
|
||||
"TEST_12345678901",
|
||||
"P1",
|
||||
"zdlzv5s5ydmd4ktw2v5piohegc4jcyrm6j66bq6tv2uxuerndmga",
|
||||
Fingerprint("zdlzv5s5ydmd4ktw2v5piohegc4jcyrm6j66bq6tv2uxuerndmga"),
|
||||
RequestType.MTB_FILE,
|
||||
RequestStatus.SUCCESS,
|
||||
Instant.parse("2023-08-08T02:00:00Z")
|
||||
@ -208,7 +209,7 @@ class RequestProcessorTest {
|
||||
UUID.randomUUID().toString(),
|
||||
"TEST_12345678901",
|
||||
"P1",
|
||||
"different",
|
||||
Fingerprint("different"),
|
||||
RequestType.MTB_FILE,
|
||||
RequestStatus.SUCCESS,
|
||||
Instant.parse("2023-08-08T02:00:00Z")
|
||||
@ -271,7 +272,7 @@ class RequestProcessorTest {
|
||||
UUID.randomUUID().toString(),
|
||||
"TEST_12345678901",
|
||||
"P1",
|
||||
"different",
|
||||
Fingerprint("different"),
|
||||
RequestType.MTB_FILE,
|
||||
RequestStatus.SUCCESS,
|
||||
Instant.parse("2023-08-08T02:00:00Z")
|
||||
|
@ -19,6 +19,7 @@
|
||||
|
||||
package dev.dnpm.etl.processor.services
|
||||
|
||||
import dev.dnpm.etl.processor.Fingerprint
|
||||
import dev.dnpm.etl.processor.monitoring.Request
|
||||
import dev.dnpm.etl.processor.monitoring.RequestRepository
|
||||
import dev.dnpm.etl.processor.monitoring.RequestStatus
|
||||
@ -45,7 +46,7 @@ class RequestServiceTest {
|
||||
UUID.randomUUID().toString(),
|
||||
"TEST_dummy",
|
||||
"PX",
|
||||
"dummy",
|
||||
Fingerprint("dummy"),
|
||||
RequestType.MTB_FILE,
|
||||
RequestStatus.SUCCESS,
|
||||
Instant.parse("2023-08-08T02:00:00Z")
|
||||
@ -67,7 +68,7 @@ class RequestServiceTest {
|
||||
UUID.randomUUID().toString(),
|
||||
"TEST_12345678901",
|
||||
"P1",
|
||||
"0123456789abcdef1",
|
||||
Fingerprint("0123456789abcdef1"),
|
||||
RequestType.MTB_FILE,
|
||||
RequestStatus.WARNING,
|
||||
Instant.parse("2023-07-07T00:00:00Z")
|
||||
@ -77,7 +78,7 @@ class RequestServiceTest {
|
||||
UUID.randomUUID().toString(),
|
||||
"TEST_12345678901",
|
||||
"P1",
|
||||
"0123456789abcdefd",
|
||||
Fingerprint("0123456789abcdefd"),
|
||||
RequestType.DELETE,
|
||||
RequestStatus.WARNING,
|
||||
Instant.parse("2023-07-07T02:00:00Z")
|
||||
@ -87,7 +88,7 @@ class RequestServiceTest {
|
||||
UUID.randomUUID().toString(),
|
||||
"TEST_12345678901",
|
||||
"P1",
|
||||
"0123456789abcdef1",
|
||||
Fingerprint("0123456789abcdef1"),
|
||||
RequestType.MTB_FILE,
|
||||
RequestStatus.UNKNOWN,
|
||||
Instant.parse("2023-08-11T00:00:00Z")
|
||||
@ -107,7 +108,7 @@ class RequestServiceTest {
|
||||
UUID.randomUUID().toString(),
|
||||
"TEST_12345678901",
|
||||
"P1",
|
||||
"0123456789abcdef1",
|
||||
Fingerprint("0123456789abcdef1"),
|
||||
RequestType.MTB_FILE,
|
||||
RequestStatus.WARNING,
|
||||
Instant.parse("2023-07-07T00:00:00Z")
|
||||
@ -117,7 +118,7 @@ class RequestServiceTest {
|
||||
UUID.randomUUID().toString(),
|
||||
"TEST_12345678901",
|
||||
"P1",
|
||||
"0123456789abcdef1",
|
||||
Fingerprint("0123456789abcdef1"),
|
||||
RequestType.MTB_FILE,
|
||||
RequestStatus.WARNING,
|
||||
Instant.parse("2023-07-07T02:00:00Z")
|
||||
@ -127,7 +128,7 @@ class RequestServiceTest {
|
||||
UUID.randomUUID().toString(),
|
||||
"TEST_12345678901",
|
||||
"P1",
|
||||
"0123456789abcdef1",
|
||||
Fingerprint("0123456789abcdef1"),
|
||||
RequestType.MTB_FILE,
|
||||
RequestStatus.UNKNOWN,
|
||||
Instant.parse("2023-08-11T00:00:00Z")
|
||||
@ -147,7 +148,7 @@ class RequestServiceTest {
|
||||
UUID.randomUUID().toString(),
|
||||
"TEST_12345678901",
|
||||
"P1",
|
||||
"0123456789abcdef1",
|
||||
Fingerprint("0123456789abcdef1"),
|
||||
RequestType.DELETE,
|
||||
RequestStatus.SUCCESS,
|
||||
Instant.parse("2023-07-07T02:00:00Z")
|
||||
@ -157,7 +158,7 @@ class RequestServiceTest {
|
||||
UUID.randomUUID().toString(),
|
||||
"TEST_12345678902",
|
||||
"P2",
|
||||
"0123456789abcdef2",
|
||||
Fingerprint("0123456789abcdef2"),
|
||||
RequestType.MTB_FILE,
|
||||
RequestStatus.WARNING,
|
||||
Instant.parse("2023-08-08T00:00:00Z")
|
||||
@ -167,7 +168,7 @@ class RequestServiceTest {
|
||||
val actual = RequestService.lastMtbFileRequestForPatientPseudonym(requests)
|
||||
|
||||
assertThat(actual).isInstanceOf(Request::class.java)
|
||||
assertThat(actual?.fingerprint).isEqualTo("0123456789abcdef2")
|
||||
assertThat(actual?.fingerprint).isEqualTo(Fingerprint("0123456789abcdef2"))
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -190,7 +191,7 @@ class RequestServiceTest {
|
||||
UUID.randomUUID().toString(),
|
||||
"TEST_12345678901",
|
||||
"P1",
|
||||
"0123456789abcdef1",
|
||||
Fingerprint("0123456789abcdef1"),
|
||||
RequestType.DELETE,
|
||||
RequestStatus.SUCCESS,
|
||||
Instant.parse("2023-07-07T02:00:00Z")
|
||||
|
@ -19,6 +19,7 @@
|
||||
|
||||
package dev.dnpm.etl.processor.services
|
||||
|
||||
import dev.dnpm.etl.processor.Fingerprint
|
||||
import dev.dnpm.etl.processor.monitoring.Request
|
||||
import dev.dnpm.etl.processor.monitoring.RequestRepository
|
||||
import dev.dnpm.etl.processor.monitoring.RequestStatus
|
||||
@ -50,7 +51,7 @@ class ResponseProcessorTest {
|
||||
"TestID1234",
|
||||
"PSEUDONYM-A",
|
||||
"1",
|
||||
"dummyfingerprint",
|
||||
Fingerprint("dummyfingerprint"),
|
||||
RequestType.MTB_FILE,
|
||||
RequestStatus.UNKNOWN
|
||||
)
|
||||
|
Loading…
x
Reference in New Issue
Block a user