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:
@@ -8,6 +8,7 @@ import org.raddatz.familienarchiv.dto.IncompleteDocumentDTO;
|
|||||||
import org.raddatz.familienarchiv.model.Document;
|
import org.raddatz.familienarchiv.model.Document;
|
||||||
import org.raddatz.familienarchiv.dto.DocumentSort;
|
import org.raddatz.familienarchiv.dto.DocumentSort;
|
||||||
import org.raddatz.familienarchiv.model.DocumentStatus;
|
import org.raddatz.familienarchiv.model.DocumentStatus;
|
||||||
|
import org.raddatz.familienarchiv.model.ScriptType;
|
||||||
import org.raddatz.familienarchiv.model.Person;
|
import org.raddatz.familienarchiv.model.Person;
|
||||||
import org.raddatz.familienarchiv.model.Tag;
|
import org.raddatz.familienarchiv.model.Tag;
|
||||||
import org.raddatz.familienarchiv.repository.DocumentRepository;
|
import org.raddatz.familienarchiv.repository.DocumentRepository;
|
||||||
@@ -377,6 +378,13 @@ public class DocumentService {
|
|||||||
return documentRepository.findAll(conversation, Sort.by(Sort.Direction.ASC, "documentDate"));
|
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) {
|
public Document getDocumentById(UUID id) {
|
||||||
return documentRepository.findById(id)
|
return documentRepository.findById(id)
|
||||||
.orElseThrow(() -> DomainException.notFound(ErrorCode.DOCUMENT_NOT_FOUND, "Document not found: " + id));
|
.orElseThrow(() -> DomainException.notFound(ErrorCode.DOCUMENT_NOT_FOUND, "Document not found: " + id));
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ public class OcrService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (scriptTypeOverride != null) {
|
if (scriptTypeOverride != null) {
|
||||||
doc.setScriptType(scriptTypeOverride);
|
documentService.updateScriptType(documentId, scriptTypeOverride);
|
||||||
}
|
}
|
||||||
|
|
||||||
OcrJob job = OcrJob.builder()
|
OcrJob job = OcrJob.builder()
|
||||||
|
|||||||
@@ -146,7 +146,7 @@ class OcrServiceTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void startOcr_setsScriptTypeOnDocument_whenProvided() {
|
void startOcr_updatesScriptType_whenProvided() {
|
||||||
UUID docId = UUID.randomUUID();
|
UUID docId = UUID.randomUUID();
|
||||||
Document doc = Document.builder().id(docId).status(DocumentStatus.UPLOADED)
|
Document doc = Document.builder().id(docId).status(DocumentStatus.UPLOADED)
|
||||||
.filePath("test.pdf").scriptType(ScriptType.UNKNOWN).build();
|
.filePath("test.pdf").scriptType(ScriptType.UNKNOWN).build();
|
||||||
@@ -160,6 +160,6 @@ class OcrServiceTest {
|
|||||||
|
|
||||||
ocrService.startOcr(docId, ScriptType.HANDWRITING_LATIN, UUID.randomUUID());
|
ocrService.startOcr(docId, ScriptType.HANDWRITING_LATIN, UUID.randomUUID());
|
||||||
|
|
||||||
assertThat(doc.getScriptType()).isEqualTo(ScriptType.HANDWRITING_LATIN);
|
verify(documentService).updateScriptType(docId, ScriptType.HANDWRITING_LATIN);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user