From 6a0fd25662f035ec06a6308c994338026d6f739a Mon Sep 17 00:00:00 2001 From: Marcel Date: Mon, 13 Apr 2026 12:26:37 +0200 Subject: [PATCH] fix(ocr): persist scriptType override via DocumentService transaction OcrService.startOcr() was setting scriptType on a detached entity, silently losing the mutation. Added DocumentService.updateScriptType() with @Transactional to persist the change properly. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../raddatz/familienarchiv/service/DocumentService.java | 8 ++++++++ .../org/raddatz/familienarchiv/service/OcrService.java | 2 +- .../raddatz/familienarchiv/service/OcrServiceTest.java | 4 ++-- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/backend/src/main/java/org/raddatz/familienarchiv/service/DocumentService.java b/backend/src/main/java/org/raddatz/familienarchiv/service/DocumentService.java index e3a6aea0..f06a9922 100644 --- a/backend/src/main/java/org/raddatz/familienarchiv/service/DocumentService.java +++ b/backend/src/main/java/org/raddatz/familienarchiv/service/DocumentService.java @@ -8,6 +8,7 @@ import org.raddatz.familienarchiv.dto.IncompleteDocumentDTO; import org.raddatz.familienarchiv.model.Document; import org.raddatz.familienarchiv.dto.DocumentSort; import org.raddatz.familienarchiv.model.DocumentStatus; +import org.raddatz.familienarchiv.model.ScriptType; import org.raddatz.familienarchiv.model.Person; import org.raddatz.familienarchiv.model.Tag; import org.raddatz.familienarchiv.repository.DocumentRepository; @@ -377,6 +378,13 @@ public class DocumentService { return documentRepository.findAll(conversation, Sort.by(Sort.Direction.ASC, "documentDate")); } + @Transactional + public void updateScriptType(UUID documentId, ScriptType scriptType) { + Document doc = getDocumentById(documentId); + doc.setScriptType(scriptType); + documentRepository.save(doc); + } + public Document getDocumentById(UUID id) { return documentRepository.findById(id) .orElseThrow(() -> DomainException.notFound(ErrorCode.DOCUMENT_NOT_FOUND, "Document not found: " + id)); diff --git a/backend/src/main/java/org/raddatz/familienarchiv/service/OcrService.java b/backend/src/main/java/org/raddatz/familienarchiv/service/OcrService.java index 38b783da..dcc14dd1 100644 --- a/backend/src/main/java/org/raddatz/familienarchiv/service/OcrService.java +++ b/backend/src/main/java/org/raddatz/familienarchiv/service/OcrService.java @@ -65,7 +65,7 @@ public class OcrService { } if (scriptTypeOverride != null) { - doc.setScriptType(scriptTypeOverride); + documentService.updateScriptType(documentId, scriptTypeOverride); } OcrJob job = OcrJob.builder() diff --git a/backend/src/test/java/org/raddatz/familienarchiv/service/OcrServiceTest.java b/backend/src/test/java/org/raddatz/familienarchiv/service/OcrServiceTest.java index 6827e03b..f9932616 100644 --- a/backend/src/test/java/org/raddatz/familienarchiv/service/OcrServiceTest.java +++ b/backend/src/test/java/org/raddatz/familienarchiv/service/OcrServiceTest.java @@ -146,7 +146,7 @@ class OcrServiceTest { } @Test - void startOcr_setsScriptTypeOnDocument_whenProvided() { + void startOcr_updatesScriptType_whenProvided() { UUID docId = UUID.randomUUID(); Document doc = Document.builder().id(docId).status(DocumentStatus.UPLOADED) .filePath("test.pdf").scriptType(ScriptType.UNKNOWN).build(); @@ -160,6 +160,6 @@ class OcrServiceTest { ocrService.startOcr(docId, ScriptType.HANDWRITING_LATIN, UUID.randomUUID()); - assertThat(doc.getScriptType()).isEqualTo(ScriptType.HANDWRITING_LATIN); + verify(documentService).updateScriptType(docId, ScriptType.HANDWRITING_LATIN); } }