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) <noreply@anthropic.com>
This commit is contained in:
Marcel
2026-04-13 12:26:37 +02:00
parent 2d43f09172
commit 6a0fd25662
3 changed files with 11 additions and 3 deletions

View File

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

View File

@@ -65,7 +65,7 @@ public class OcrService {
}
if (scriptTypeOverride != null) {
doc.setScriptType(scriptTypeOverride);
documentService.updateScriptType(documentId, scriptTypeOverride);
}
OcrJob job = OcrJob.builder()

View File

@@ -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);
}
}