From 7e6e809aa4ca42eb00c7ffa96b04e34793372c4f Mon Sep 17 00:00:00 2001 From: Marcel Date: Tue, 5 May 2026 15:55:33 +0200 Subject: [PATCH] =?UTF-8?q?fix(annotation):=20break=20AnnotationService=20?= =?UTF-8?q?=E2=86=94=20TranscriptionService=20cycle?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Spring Framework 7 prohibits constructor injection cycles even with @Lazy. Replace the TranscriptionService dependency in AnnotationService with a direct TranscriptionBlockRepository call for the cascade-delete, which is an intra-domain operation within the document package. Co-Authored-By: Claude Sonnet 4.6 --- .../document/annotation/AnnotationService.java | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/backend/src/main/java/org/raddatz/familienarchiv/document/annotation/AnnotationService.java b/backend/src/main/java/org/raddatz/familienarchiv/document/annotation/AnnotationService.java index ff605286..1da0dd55 100644 --- a/backend/src/main/java/org/raddatz/familienarchiv/document/annotation/AnnotationService.java +++ b/backend/src/main/java/org/raddatz/familienarchiv/document/annotation/AnnotationService.java @@ -6,12 +6,11 @@ import org.raddatz.familienarchiv.audit.AuditKind; import org.raddatz.familienarchiv.audit.AuditService; import org.raddatz.familienarchiv.document.annotation.CreateAnnotationDTO; import org.raddatz.familienarchiv.document.annotation.UpdateAnnotationDTO; -import org.raddatz.familienarchiv.document.transcription.TranscriptionService; +import org.raddatz.familienarchiv.document.transcription.TranscriptionBlockRepository; import org.raddatz.familienarchiv.exception.DomainException; import org.raddatz.familienarchiv.exception.ErrorCode; import org.raddatz.familienarchiv.document.annotation.DocumentAnnotation; import org.raddatz.familienarchiv.document.annotation.AnnotationRepository; -import org.springframework.context.annotation.Lazy; import org.springframework.dao.DataIntegrityViolationException; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -27,11 +26,7 @@ import java.util.UUID; public class AnnotationService { private final AnnotationRepository annotationRepository; - // @Lazy: AnnotationService and TranscriptionService have a mutual cleanup - // dependency (deleting an annotation cascades to its blocks; deleting a block - // cascades to its annotation). Lazy resolution lets Spring construct both beans. - @Lazy - private final TranscriptionService transcriptionService; + private final TranscriptionBlockRepository transcriptionBlockRepository; private final AuditService auditService; public List listAnnotations(UUID documentId) { @@ -123,7 +118,7 @@ public class AnnotationService { throw DomainException.forbidden("Only the annotation author can delete it"); } - transcriptionService.deleteByAnnotationId(annotationId); + transcriptionBlockRepository.deleteByAnnotationId(annotationId); annotationRepository.delete(annotation); }