fix(annotation): break AnnotationService ↔ TranscriptionService cycle
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 <noreply@anthropic.com>
This commit is contained in:
@@ -6,12 +6,11 @@ import org.raddatz.familienarchiv.audit.AuditKind;
|
|||||||
import org.raddatz.familienarchiv.audit.AuditService;
|
import org.raddatz.familienarchiv.audit.AuditService;
|
||||||
import org.raddatz.familienarchiv.document.annotation.CreateAnnotationDTO;
|
import org.raddatz.familienarchiv.document.annotation.CreateAnnotationDTO;
|
||||||
import org.raddatz.familienarchiv.document.annotation.UpdateAnnotationDTO;
|
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.DomainException;
|
||||||
import org.raddatz.familienarchiv.exception.ErrorCode;
|
import org.raddatz.familienarchiv.exception.ErrorCode;
|
||||||
import org.raddatz.familienarchiv.document.annotation.DocumentAnnotation;
|
import org.raddatz.familienarchiv.document.annotation.DocumentAnnotation;
|
||||||
import org.raddatz.familienarchiv.document.annotation.AnnotationRepository;
|
import org.raddatz.familienarchiv.document.annotation.AnnotationRepository;
|
||||||
import org.springframework.context.annotation.Lazy;
|
|
||||||
import org.springframework.dao.DataIntegrityViolationException;
|
import org.springframework.dao.DataIntegrityViolationException;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
@@ -27,11 +26,7 @@ import java.util.UUID;
|
|||||||
public class AnnotationService {
|
public class AnnotationService {
|
||||||
|
|
||||||
private final AnnotationRepository annotationRepository;
|
private final AnnotationRepository annotationRepository;
|
||||||
// @Lazy: AnnotationService and TranscriptionService have a mutual cleanup
|
private final TranscriptionBlockRepository transcriptionBlockRepository;
|
||||||
// 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 AuditService auditService;
|
private final AuditService auditService;
|
||||||
|
|
||||||
public List<DocumentAnnotation> listAnnotations(UUID documentId) {
|
public List<DocumentAnnotation> listAnnotations(UUID documentId) {
|
||||||
@@ -123,7 +118,7 @@ public class AnnotationService {
|
|||||||
throw DomainException.forbidden("Only the annotation author can delete it");
|
throw DomainException.forbidden("Only the annotation author can delete it");
|
||||||
}
|
}
|
||||||
|
|
||||||
transcriptionService.deleteByAnnotationId(annotationId);
|
transcriptionBlockRepository.deleteByAnnotationId(annotationId);
|
||||||
annotationRepository.delete(annotation);
|
annotationRepository.delete(annotation);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user