1
0
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:
Paul-Christian Volkmer 2023-08-09 10:34:23 +02:00
parent 13bfa0018d
commit 47830ed9f7
4 changed files with 59 additions and 65 deletions

View File

@ -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() {
} }
} }

View File

@ -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

View File

@ -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,
it.javaClass.simpleName sender.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,
it.javaClass.simpleName sender.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,14 +124,13 @@ 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,
it.javaClass.simpleName sender.javaClass.simpleName
) )
} }
@ -147,7 +138,7 @@ class RequestProcessor(
logger.error( logger.error(
"Error deleting data for Patient '{}' using '{}'", "Error deleting data for Patient '{}' using '{}'",
patientPseudonym, patientPseudonym,
it.javaClass.simpleName sender.javaClass.simpleName
) )
} }
@ -155,19 +146,16 @@ class RequestProcessor(
logger.error( logger.error(
"Unknown result on deleting data for Patient '{}' using '{}'", "Unknown result on deleting data for Patient '{}' using '{}'",
patientPseudonym, patientPseudonym,
it.javaClass.simpleName sender.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

View File

@ -67,7 +67,7 @@ class RequestProcessorTest {
requestProcessor = RequestProcessor( requestProcessor = RequestProcessor(
pseudonymizeService, pseudonymizeService,
listOf(sender), sender,
requestService, requestService,
objectMapper, objectMapper,
statisticsUpdateProducer statisticsUpdateProducer