From 6823973429920a2c595613ea9b59bc88c991ecff Mon Sep 17 00:00:00 2001 From: Marcel Date: Mon, 13 Apr 2026 10:04:02 +0200 Subject: [PATCH] refactor(ocr): extract createSingleBlock from createTranscriptionBlocks Enable per-page block creation during streaming by extracting the loop body into a package-private createSingleBlock() method with an explicit sortOrder parameter. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../service/OcrAsyncRunner.java | 41 ++++++++++--------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/backend/src/main/java/org/raddatz/familienarchiv/service/OcrAsyncRunner.java b/backend/src/main/java/org/raddatz/familienarchiv/service/OcrAsyncRunner.java index 1b773748..bccc923a 100644 --- a/backend/src/main/java/org/raddatz/familienarchiv/service/OcrAsyncRunner.java +++ b/backend/src/main/java/org/raddatz/familienarchiv/service/OcrAsyncRunner.java @@ -162,25 +162,28 @@ public class OcrAsyncRunner { private void createTranscriptionBlocks(UUID documentId, List blocks, UUID userId, String fileHash) { for (int i = 0; i < blocks.size(); i++) { - OcrBlockResult block = blocks.get(i); - - CreateAnnotationDTO annotationDTO = new CreateAnnotationDTO( - block.pageNumber(), block.x(), block.y(), - block.width(), block.height(), OCR_ANNOTATION_COLOR); - - DocumentAnnotation annotation = annotationService.createOcrAnnotation( - documentId, annotationDTO, userId, fileHash, block.polygon()); - - TranscriptionBlock transcriptionBlock = TranscriptionBlock.builder() - .annotationId(annotation.getId()) - .documentId(documentId) - .text(block.text() != null ? block.text() : "") - .sortOrder(i) - .source(BlockSource.OCR) - .createdBy(userId) - .updatedBy(userId) - .build(); - blockRepository.save(transcriptionBlock); + createSingleBlock(documentId, blocks.get(i), userId, fileHash, i); } } + + void createSingleBlock(UUID documentId, OcrBlockResult block, + UUID userId, String fileHash, int sortOrder) { + CreateAnnotationDTO annotationDTO = new CreateAnnotationDTO( + block.pageNumber(), block.x(), block.y(), + block.width(), block.height(), OCR_ANNOTATION_COLOR); + + DocumentAnnotation annotation = annotationService.createOcrAnnotation( + documentId, annotationDTO, userId, fileHash, block.polygon()); + + TranscriptionBlock transcriptionBlock = TranscriptionBlock.builder() + .annotationId(annotation.getId()) + .documentId(documentId) + .text(block.text() != null ? block.text() : "") + .sortOrder(sortOrder) + .source(BlockSource.OCR) + .createdBy(userId) + .updatedBy(userId) + .build(); + blockRepository.save(transcriptionBlock); + } }