summaryrefslogtreecommitdiff
path: root/src/main/kotlin
diff options
context:
space:
mode:
authorPaul-Christian Volkmer2026-03-12 11:23:32 +0100
committerGitHub2026-03-12 11:23:32 +0100
commitdc3aa929216b26d46ce134ac98c279a68d5679c1 (patch)
treed86a42a14ee8bd35046d4304fb30e618f56c6d17 /src/main/kotlin
parenta8f8d5f137c9776a20b2bc91cd3bdd99c9b96991 (diff)
feat: save error request for non json (#266)
Diffstat (limited to 'src/main/kotlin')
-rw-r--r--src/main/kotlin/dev/dnpm/etl/processor/input/KafkaInputListener.kt61
-rw-r--r--src/main/kotlin/dev/dnpm/etl/processor/input/MtbFileRestController.kt17
2 files changed, 50 insertions, 28 deletions
diff --git a/src/main/kotlin/dev/dnpm/etl/processor/input/KafkaInputListener.kt b/src/main/kotlin/dev/dnpm/etl/processor/input/KafkaInputListener.kt
index 41c85ac..03cd03d 100644
--- a/src/main/kotlin/dev/dnpm/etl/processor/input/KafkaInputListener.kt
+++ b/src/main/kotlin/dev/dnpm/etl/processor/input/KafkaInputListener.kt
@@ -70,37 +70,42 @@ class KafkaInputListener(
}
private fun handleDnpmV2Message(record: ConsumerRecord<String, String>) {
- val mtbFile = objectMapper.readValue(record.value(), Mtb::class.java)
- val patientId = PatientId(mtbFile.patient.id)
- val firstRequestIdHeader = record.headers().headers("requestId")?.firstOrNull()
- val requestId =
- if (null != firstRequestIdHeader) {
- RequestId(String(firstRequestIdHeader.value()))
- } else {
- RequestId("")
- }
- val firstRequestMethodHeader = record.headers().headers("requestMethod")?.firstOrNull()
- val requestMethod =
- if (null != firstRequestMethodHeader) {
- String(firstRequestMethodHeader.value())
- } else {
- ""
- }
+ try {
+ val mtbFile = objectMapper.readValue(record.value(), Mtb::class.java)
+ val patientId = PatientId(mtbFile.patient.id)
+ val firstRequestIdHeader = record.headers().headers("requestId")?.firstOrNull()
+ val requestId =
+ if (null != firstRequestIdHeader) {
+ RequestId(String(firstRequestIdHeader.value()))
+ } else {
+ RequestId("")
+ }
+ val firstRequestMethodHeader = record.headers().headers("requestMethod")?.firstOrNull()
+ val requestMethod =
+ if (null != firstRequestMethodHeader) {
+ String(firstRequestMethodHeader.value())
+ } else {
+ ""
+ }
- if (requestMethod == "DELETE") {
- logger.debug("Accepted MTB File and process deletion")
- if (requestId.isBlank()) {
- requestProcessor.processDeletion(patientId, TtpConsentStatus.UNKNOWN_CHECK_FILE)
- } else {
- requestProcessor.processDeletion(patientId, requestId, TtpConsentStatus.UNKNOWN_CHECK_FILE)
- }
- } else {
- logger.debug("Accepted MTB File for processing")
- if (requestId.isBlank()) {
- requestProcessor.processMtbFile(mtbFile)
+ if (requestMethod == "DELETE") {
+ logger.debug("Accepted MTB File and process deletion")
+ if (requestId.isBlank()) {
+ requestProcessor.processDeletion(patientId, TtpConsentStatus.UNKNOWN_CHECK_FILE)
+ } else {
+ requestProcessor.processDeletion(patientId, requestId, TtpConsentStatus.UNKNOWN_CHECK_FILE)
+ }
} else {
- requestProcessor.processMtbFile(mtbFile, requestId)
+ logger.debug("Accepted MTB File for processing")
+ if (requestId.isBlank()) {
+ requestProcessor.processMtbFile(mtbFile)
+ } else {
+ requestProcessor.processMtbFile(mtbFile, requestId)
+ }
}
+ } catch (e: Exception) {
+ logger.error("Error while processing MtbFile", e)
+ requestProcessor.processMtbFile(Mtb.builder().build())
}
}
}
diff --git a/src/main/kotlin/dev/dnpm/etl/processor/input/MtbFileRestController.kt b/src/main/kotlin/dev/dnpm/etl/processor/input/MtbFileRestController.kt
index 523a0a8..c9825c7 100644
--- a/src/main/kotlin/dev/dnpm/etl/processor/input/MtbFileRestController.kt
+++ b/src/main/kotlin/dev/dnpm/etl/processor/input/MtbFileRestController.kt
@@ -28,6 +28,7 @@ import dev.pcvolkmer.mv64e.mtb.Mtb
import org.slf4j.LoggerFactory
import org.springframework.http.MediaType
import org.springframework.http.ResponseEntity
+import org.springframework.http.converter.HttpMessageNotReadableException
import org.springframework.web.bind.annotation.*
@RestController
@@ -67,3 +68,19 @@ class MtbFileRestController(
return ResponseEntity.accepted().build()
}
}
+
+@RestControllerAdvice(assignableTypes = [MtbFileRestController::class])
+class MtbFileRestControllerAdvice(
+ private val requestProcessor: RequestProcessor
+) {
+
+ private val logger = LoggerFactory.getLogger(MtbFileRestControllerAdvice::class.java)
+
+ @ExceptionHandler(HttpMessageNotReadableException::class)
+ fun handleMessageNotReadableException(e: Exception): ResponseEntity<Unit> {
+ logger.error("Error while processing MtbFile", e)
+ requestProcessor.processMtbFile(Mtb.builder().build())
+ return ResponseEntity.badRequest().build()
+ }
+
+}