diff --git a/backend/src/main/java/org/raddatz/familienarchiv/service/TranscriptionService.java b/backend/src/main/java/org/raddatz/familienarchiv/service/TranscriptionService.java index 69982788..bfb02253 100644 --- a/backend/src/main/java/org/raddatz/familienarchiv/service/TranscriptionService.java +++ b/backend/src/main/java/org/raddatz/familienarchiv/service/TranscriptionService.java @@ -104,8 +104,8 @@ public class TranscriptionService { public TranscriptionBlock upsertGuidedBlock(UUID documentId, UUID annotationId, String text, UUID userId) { return blockRepository.findByAnnotationId(annotationId).map(existing -> { - if (existing.getSource() == BlockSource.MANUAL) { - return existing; // never overwrite manual transcription + if (existing.getSource() == BlockSource.MANUAL && !existing.getText().isBlank()) { + return existing; // never overwrite non-empty manual transcription } existing.setText(sanitizeText(text)); existing.setUpdatedBy(userId); diff --git a/backend/src/test/java/org/raddatz/familienarchiv/service/TranscriptionServiceGuidedTest.java b/backend/src/test/java/org/raddatz/familienarchiv/service/TranscriptionServiceGuidedTest.java index afbc90bf..e8d53cad 100644 --- a/backend/src/test/java/org/raddatz/familienarchiv/service/TranscriptionServiceGuidedTest.java +++ b/backend/src/test/java/org/raddatz/familienarchiv/service/TranscriptionServiceGuidedTest.java @@ -74,7 +74,7 @@ class TranscriptionServiceGuidedTest { } @Test - void upsertGuidedBlock_doesNotOverwriteManualBlock() { + void upsertGuidedBlock_doesNotOverwriteNonEmptyManualBlock() { TranscriptionBlock manual = TranscriptionBlock.builder() .id(UUID.randomUUID()) .annotationId(annId) @@ -90,4 +90,22 @@ class TranscriptionServiceGuidedTest { assertThat(result.getText()).isEqualTo("manually written"); verify(blockRepository, never()).save(any()); } + + @Test + void upsertGuidedBlock_fillsEmptyManualBlock_withOcrText() { + TranscriptionBlock emptyManual = TranscriptionBlock.builder() + .id(UUID.randomUUID()) + .annotationId(annId) + .documentId(docId) + .text("") + .source(BlockSource.MANUAL) + .sortOrder(0) + .build(); + when(blockRepository.findByAnnotationId(annId)).thenReturn(Optional.of(emptyManual)); + + TranscriptionBlock result = service.upsertGuidedBlock(docId, annId, "ocr result", userId); + + assertThat(result.getText()).isEqualTo("ocr result"); + verify(blockRepository).save(any()); + } }