42 lines
3.3 KiB
Plaintext
42 lines
3.3 KiB
Plaintext
@startuml
|
|
!include <C4/C4_Component>
|
|
|
|
title Component Diagram: API Backend — Document Transcription Pipeline
|
|
|
|
Container(frontend, "Web Frontend", "SvelteKit")
|
|
ContainerDb(db, "PostgreSQL", "PostgreSQL 16")
|
|
|
|
System_Boundary(backend, "API Backend (Spring Boot)") {
|
|
Component(transcriptionCtrl, "TranscriptionBlockController", "Spring MVC — /api/transcription", "CRUD for transcription text blocks per document page. Manages sort order, review status, and block version history.")
|
|
Component(annotationCtrl, "AnnotationController", "Spring MVC — /api/documents/{id}/annotations", "CRUD for free-form page annotations with polygon coordinates, colour coding, and file-hash tracking.")
|
|
Component(commentCtrl, "CommentController", "Spring MVC — /api/documents/{id}/comments", "Threaded comment CRUD on transcription blocks with @mention support and notification triggers.")
|
|
Component(transcriptionSvc, "TranscriptionService", "Spring Service", "Creates and updates transcription blocks from annotation regions. Tracks block versions, sanitizes text with an HTML allow-list, and triggers mentions.")
|
|
Component(transcriptionQueueSvc, "TranscriptionQueueService", "Spring Service", "Assembles segmentation, transcription, and review queue projections by delegating to DocumentService and AuditLogQueryService.")
|
|
Component(annotationSvc, "AnnotationService", "Spring Service", "Manages document page annotations with polygon coordinates. Called by OcrAsyncRunner to persist OCR-generated block boundaries.")
|
|
Component(commentSvc, "CommentService", "Spring Service", "Creates and manages threaded comments with @mention parsing. Triggers NotificationService for REPLY and MENTION events.")
|
|
Component(blockRepo, "TranscriptionBlockRepository", "Spring Data JPA", "Reads and writes TranscriptionBlock and TranscriptionBlockVersion records.")
|
|
Component(annotationRepo, "AnnotationRepository", "Spring Data JPA", "Reads and writes DocumentAnnotation records.")
|
|
Component(commentRepo, "CommentRepository", "Spring Data JPA", "Reads and writes DocumentComment records.")
|
|
}
|
|
|
|
Component(documentSvc, "DocumentService", "Spring Service", "See diagram 3b. Called by TranscriptionQueueService to assemble pipeline queue projections.")
|
|
Component(auditQuerySvc, "AuditLogQueryService", "Spring Service", "See diagram 3g. Called by TranscriptionQueueService for pipeline activity data.")
|
|
|
|
Rel(frontend, transcriptionCtrl, "Transcription block requests", "HTTP / JSON")
|
|
Rel(frontend, annotationCtrl, "Annotation requests", "HTTP / JSON")
|
|
Rel(frontend, commentCtrl, "Comment requests", "HTTP / JSON")
|
|
Rel(transcriptionCtrl, transcriptionSvc, "Delegates to")
|
|
Rel(transcriptionCtrl, transcriptionQueueSvc, "Queries pipeline queues")
|
|
Rel(annotationCtrl, annotationSvc, "Delegates to")
|
|
Rel(commentCtrl, commentSvc, "Delegates to")
|
|
Rel(transcriptionSvc, blockRepo, "Reads / writes blocks and versions")
|
|
Rel(annotationSvc, annotationRepo, "Reads / writes annotations")
|
|
Rel(commentSvc, commentRepo, "Reads / writes comments")
|
|
Rel(transcriptionQueueSvc, documentSvc, "Queries pipeline document state")
|
|
Rel(transcriptionQueueSvc, auditQuerySvc, "Queries pipeline activity data")
|
|
Rel(blockRepo, db, "SQL queries", "JDBC")
|
|
Rel(annotationRepo, db, "SQL queries", "JDBC")
|
|
Rel(commentRepo, db, "SQL queries", "JDBC")
|
|
|
|
@enduml
|