mirror of
https://github.com/pcvolkmer/etl-processor.git
synced 2025-04-20 01:36:50 +00:00
Use single MtbFileSender
This commit is contained in:
parent
13bfa0018d
commit
47830ed9f7
@ -19,19 +19,22 @@
|
|||||||
|
|
||||||
package dev.dnpm.etl.processor
|
package dev.dnpm.etl.processor
|
||||||
|
|
||||||
|
import dev.dnpm.etl.processor.output.MtbFileSender
|
||||||
import org.junit.jupiter.api.Test
|
import org.junit.jupiter.api.Test
|
||||||
import org.junit.jupiter.api.extension.ExtendWith
|
import org.junit.jupiter.api.extension.ExtendWith
|
||||||
import org.springframework.boot.test.context.SpringBootTest
|
import org.springframework.boot.test.context.SpringBootTest
|
||||||
|
import org.springframework.boot.test.mock.mockito.MockBean
|
||||||
import org.springframework.test.context.junit.jupiter.SpringExtension
|
import org.springframework.test.context.junit.jupiter.SpringExtension
|
||||||
import org.testcontainers.junit.jupiter.Testcontainers
|
import org.testcontainers.junit.jupiter.Testcontainers
|
||||||
|
|
||||||
@Testcontainers
|
@Testcontainers
|
||||||
@ExtendWith(SpringExtension::class)
|
@ExtendWith(SpringExtension::class)
|
||||||
@SpringBootTest
|
@SpringBootTest
|
||||||
|
@MockBean(MtbFileSender::class)
|
||||||
class EtlProcessorApplicationTests : AbstractTestcontainerTest() {
|
class EtlProcessorApplicationTests : AbstractTestcontainerTest() {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun contextLoads() {
|
fun contextLoadsIfMtbFileSenderConfigured() {
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -24,12 +24,14 @@ import dev.dnpm.etl.processor.monitoring.Request
|
|||||||
import dev.dnpm.etl.processor.monitoring.RequestRepository
|
import dev.dnpm.etl.processor.monitoring.RequestRepository
|
||||||
import dev.dnpm.etl.processor.monitoring.RequestStatus
|
import dev.dnpm.etl.processor.monitoring.RequestStatus
|
||||||
import dev.dnpm.etl.processor.monitoring.RequestType
|
import dev.dnpm.etl.processor.monitoring.RequestType
|
||||||
|
import dev.dnpm.etl.processor.output.MtbFileSender
|
||||||
import org.assertj.core.api.Assertions.assertThat
|
import org.assertj.core.api.Assertions.assertThat
|
||||||
import org.junit.jupiter.api.BeforeEach
|
import org.junit.jupiter.api.BeforeEach
|
||||||
import org.junit.jupiter.api.Test
|
import org.junit.jupiter.api.Test
|
||||||
import org.junit.jupiter.api.extension.ExtendWith
|
import org.junit.jupiter.api.extension.ExtendWith
|
||||||
import org.springframework.beans.factory.annotation.Autowired
|
import org.springframework.beans.factory.annotation.Autowired
|
||||||
import org.springframework.boot.test.context.SpringBootTest
|
import org.springframework.boot.test.context.SpringBootTest
|
||||||
|
import org.springframework.boot.test.mock.mockito.MockBean
|
||||||
import org.springframework.test.context.junit.jupiter.SpringExtension
|
import org.springframework.test.context.junit.jupiter.SpringExtension
|
||||||
import org.springframework.transaction.annotation.Transactional
|
import org.springframework.transaction.annotation.Transactional
|
||||||
import org.testcontainers.junit.jupiter.Testcontainers
|
import org.testcontainers.junit.jupiter.Testcontainers
|
||||||
@ -40,6 +42,7 @@ import java.util.*
|
|||||||
@ExtendWith(SpringExtension::class)
|
@ExtendWith(SpringExtension::class)
|
||||||
@SpringBootTest
|
@SpringBootTest
|
||||||
@Transactional
|
@Transactional
|
||||||
|
@MockBean(MtbFileSender::class)
|
||||||
class RequestServiceIntegrationTest : AbstractTestcontainerTest() {
|
class RequestServiceIntegrationTest : AbstractTestcontainerTest() {
|
||||||
|
|
||||||
private lateinit var requestRepository: RequestRepository
|
private lateinit var requestRepository: RequestRepository
|
||||||
|
@ -37,7 +37,7 @@ import java.util.*
|
|||||||
@Service
|
@Service
|
||||||
class RequestProcessor(
|
class RequestProcessor(
|
||||||
private val pseudonymizeService: PseudonymizeService,
|
private val pseudonymizeService: PseudonymizeService,
|
||||||
private val senders: List<MtbFileSender>,
|
private val sender: MtbFileSender,
|
||||||
private val requestService: RequestService,
|
private val requestService: RequestService,
|
||||||
private val objectMapper: ObjectMapper,
|
private val objectMapper: ObjectMapper,
|
||||||
private val statisticsUpdateProducer: Sinks.Many<Any>
|
private val statisticsUpdateProducer: Sinks.Many<Any>
|
||||||
@ -66,32 +66,26 @@ class RequestProcessor(
|
|||||||
|
|
||||||
val request = MtbFileSender.MtbFileRequest(UUID.randomUUID().toString(), pseudonymized)
|
val request = MtbFileSender.MtbFileRequest(UUID.randomUUID().toString(), pseudonymized)
|
||||||
|
|
||||||
val responses = senders.map {
|
val responseStatus = sender.send(request)
|
||||||
val responseStatus = it.send(request)
|
if (responseStatus.status == MtbFileSender.ResponseStatus.SUCCESS || responseStatus.status == MtbFileSender.ResponseStatus.WARNING) {
|
||||||
if (responseStatus.status == MtbFileSender.ResponseStatus.SUCCESS || responseStatus.status == MtbFileSender.ResponseStatus.WARNING) {
|
logger.info(
|
||||||
logger.info(
|
"Sent file for Patient '{}' using '{}'",
|
||||||
"Sent file for Patient '{}' using '{}'",
|
pseudonymized.patient.id,
|
||||||
pseudonymized.patient.id,
|
sender.javaClass.simpleName
|
||||||
it.javaClass.simpleName
|
)
|
||||||
)
|
} else {
|
||||||
} else {
|
logger.error(
|
||||||
logger.error(
|
"Error sending file for Patient '{}' using '{}'",
|
||||||
"Error sending file for Patient '{}' using '{}'",
|
pseudonymized.patient.id,
|
||||||
pseudonymized.patient.id,
|
sender.javaClass.simpleName
|
||||||
it.javaClass.simpleName
|
)
|
||||||
)
|
|
||||||
}
|
|
||||||
responseStatus
|
|
||||||
}
|
}
|
||||||
|
|
||||||
val requestStatus = if (responses.map { it.status }.contains(MtbFileSender.ResponseStatus.ERROR)) {
|
val requestStatus = when (responseStatus.status) {
|
||||||
RequestStatus.ERROR
|
MtbFileSender.ResponseStatus.ERROR -> RequestStatus.ERROR
|
||||||
} else if (responses.map { it.status }.contains(MtbFileSender.ResponseStatus.WARNING)) {
|
MtbFileSender.ResponseStatus.WARNING -> RequestStatus.WARNING
|
||||||
RequestStatus.WARNING
|
MtbFileSender.ResponseStatus.SUCCESS -> RequestStatus.SUCCESS
|
||||||
} else if (responses.map { it.status }.contains(MtbFileSender.ResponseStatus.SUCCESS)) {
|
else -> RequestStatus.UNKNOWN
|
||||||
RequestStatus.SUCCESS
|
|
||||||
} else {
|
|
||||||
RequestStatus.UNKNOWN
|
|
||||||
}
|
}
|
||||||
|
|
||||||
requestService.save(
|
requestService.save(
|
||||||
@ -104,9 +98,7 @@ class RequestProcessor(
|
|||||||
type = RequestType.MTB_FILE,
|
type = RequestType.MTB_FILE,
|
||||||
report = when (requestStatus) {
|
report = when (requestStatus) {
|
||||||
RequestStatus.ERROR -> Report("Fehler bei der Datenübertragung oder Inhalt nicht verarbeitbar")
|
RequestStatus.ERROR -> Report("Fehler bei der Datenübertragung oder Inhalt nicht verarbeitbar")
|
||||||
RequestStatus.WARNING -> Report("Warnungen über mangelhafte Daten",
|
RequestStatus.WARNING -> Report("Warnungen über mangelhafte Daten", responseStatus.reason)
|
||||||
responses.joinToString("\n") { it.reason })
|
|
||||||
|
|
||||||
RequestStatus.UNKNOWN -> Report("Keine Informationen")
|
RequestStatus.UNKNOWN -> Report("Keine Informationen")
|
||||||
else -> null
|
else -> null
|
||||||
}
|
}
|
||||||
@ -132,42 +124,38 @@ class RequestProcessor(
|
|||||||
try {
|
try {
|
||||||
val patientPseudonym = pseudonymizeService.patientPseudonym(patientId)
|
val patientPseudonym = pseudonymizeService.patientPseudonym(patientId)
|
||||||
|
|
||||||
val responses = senders.map {
|
val responseStatus = sender.send(MtbFileSender.DeleteRequest(requestId, patientPseudonym))
|
||||||
val responseStatus = it.send(MtbFileSender.DeleteRequest(requestId, patientPseudonym))
|
when (responseStatus.status) {
|
||||||
when (responseStatus.status) {
|
MtbFileSender.ResponseStatus.SUCCESS -> {
|
||||||
MtbFileSender.ResponseStatus.SUCCESS -> {
|
logger.info(
|
||||||
logger.info(
|
"Sent delete for Patient '{}' using '{}'",
|
||||||
"Sent delete for Patient '{}' using '{}'",
|
patientPseudonym,
|
||||||
patientPseudonym,
|
sender.javaClass.simpleName
|
||||||
it.javaClass.simpleName
|
)
|
||||||
)
|
}
|
||||||
}
|
|
||||||
|
MtbFileSender.ResponseStatus.ERROR -> {
|
||||||
MtbFileSender.ResponseStatus.ERROR -> {
|
logger.error(
|
||||||
logger.error(
|
"Error deleting data for Patient '{}' using '{}'",
|
||||||
"Error deleting data for Patient '{}' using '{}'",
|
patientPseudonym,
|
||||||
patientPseudonym,
|
sender.javaClass.simpleName
|
||||||
it.javaClass.simpleName
|
)
|
||||||
)
|
}
|
||||||
}
|
|
||||||
|
else -> {
|
||||||
else -> {
|
logger.error(
|
||||||
logger.error(
|
"Unknown result on deleting data for Patient '{}' using '{}'",
|
||||||
"Unknown result on deleting data for Patient '{}' using '{}'",
|
patientPseudonym,
|
||||||
patientPseudonym,
|
sender.javaClass.simpleName
|
||||||
it.javaClass.simpleName
|
)
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
responseStatus
|
|
||||||
}
|
}
|
||||||
|
|
||||||
val overallRequestStatus = if (responses.map { it.status }.contains(MtbFileSender.ResponseStatus.ERROR)) {
|
val requestStatus = when (responseStatus.status) {
|
||||||
RequestStatus.ERROR
|
MtbFileSender.ResponseStatus.ERROR -> RequestStatus.ERROR
|
||||||
} else if (responses.map { it.status }.contains(MtbFileSender.ResponseStatus.SUCCESS)) {
|
MtbFileSender.ResponseStatus.WARNING -> RequestStatus.WARNING
|
||||||
RequestStatus.SUCCESS
|
MtbFileSender.ResponseStatus.SUCCESS -> RequestStatus.SUCCESS
|
||||||
} else {
|
else -> RequestStatus.UNKNOWN
|
||||||
RequestStatus.UNKNOWN
|
|
||||||
}
|
}
|
||||||
|
|
||||||
requestService.save(
|
requestService.save(
|
||||||
@ -176,9 +164,9 @@ class RequestProcessor(
|
|||||||
patientId = patientPseudonym,
|
patientId = patientPseudonym,
|
||||||
pid = patientId,
|
pid = patientId,
|
||||||
fingerprint = fingerprint(patientPseudonym),
|
fingerprint = fingerprint(patientPseudonym),
|
||||||
status = overallRequestStatus,
|
status = requestStatus,
|
||||||
type = RequestType.DELETE,
|
type = RequestType.DELETE,
|
||||||
report = when (overallRequestStatus) {
|
report = when (requestStatus) {
|
||||||
RequestStatus.ERROR -> Report("Fehler bei der Datenübertragung oder Inhalt nicht verarbeitbar")
|
RequestStatus.ERROR -> Report("Fehler bei der Datenübertragung oder Inhalt nicht verarbeitbar")
|
||||||
RequestStatus.UNKNOWN -> Report("Keine Informationen")
|
RequestStatus.UNKNOWN -> Report("Keine Informationen")
|
||||||
else -> null
|
else -> null
|
||||||
|
@ -67,7 +67,7 @@ class RequestProcessorTest {
|
|||||||
|
|
||||||
requestProcessor = RequestProcessor(
|
requestProcessor = RequestProcessor(
|
||||||
pseudonymizeService,
|
pseudonymizeService,
|
||||||
listOf(sender),
|
sender,
|
||||||
requestService,
|
requestService,
|
||||||
objectMapper,
|
objectMapper,
|
||||||
statisticsUpdateProducer
|
statisticsUpdateProducer
|
||||||
|
Loading…
x
Reference in New Issue
Block a user