diff --git a/backend/src/main/java/org/raddatz/familienarchiv/dto/TranscriptionQueueItemDTO.java b/backend/src/main/java/org/raddatz/familienarchiv/dto/TranscriptionQueueItemDTO.java index f577b32b..833c047b 100644 --- a/backend/src/main/java/org/raddatz/familienarchiv/dto/TranscriptionQueueItemDTO.java +++ b/backend/src/main/java/org/raddatz/familienarchiv/dto/TranscriptionQueueItemDTO.java @@ -1,5 +1,7 @@ package org.raddatz.familienarchiv.dto; +import io.swagger.v3.oas.annotations.media.Schema; + import java.time.LocalDate; import java.util.UUID; @@ -9,10 +11,10 @@ import java.util.UUID; * in the Transkription column and the percentage label in Lesefertig. */ public record TranscriptionQueueItemDTO( - UUID id, - String title, + @Schema(requiredMode = Schema.RequiredMode.REQUIRED) UUID id, + @Schema(requiredMode = Schema.RequiredMode.REQUIRED) String title, LocalDate documentDate, - int annotationCount, - int textedBlockCount, - int reviewedBlockCount + @Schema(requiredMode = Schema.RequiredMode.REQUIRED) int annotationCount, + @Schema(requiredMode = Schema.RequiredMode.REQUIRED) int textedBlockCount, + @Schema(requiredMode = Schema.RequiredMode.REQUIRED) int reviewedBlockCount ) {} diff --git a/backend/src/main/java/org/raddatz/familienarchiv/dto/TranscriptionWeeklyStatsDTO.java b/backend/src/main/java/org/raddatz/familienarchiv/dto/TranscriptionWeeklyStatsDTO.java index 71e9fc71..99392a1f 100644 --- a/backend/src/main/java/org/raddatz/familienarchiv/dto/TranscriptionWeeklyStatsDTO.java +++ b/backend/src/main/java/org/raddatz/familienarchiv/dto/TranscriptionWeeklyStatsDTO.java @@ -1,12 +1,14 @@ package org.raddatz.familienarchiv.dto; +import io.swagger.v3.oas.annotations.media.Schema; + /** * Weekly activity pulse for the Mission Control Strip column headers. * Counts documents that received new work in each pipeline stage * during the last 7 days. */ public record TranscriptionWeeklyStatsDTO( - long segmentationCount, - long transcriptionCount, - long readyCount + @Schema(requiredMode = Schema.RequiredMode.REQUIRED) long segmentationCount, + @Schema(requiredMode = Schema.RequiredMode.REQUIRED) long transcriptionCount, + @Schema(requiredMode = Schema.RequiredMode.REQUIRED) long readyCount ) {} diff --git a/backend/src/main/resources/db/migration/V37__add_transcription_queue_indexes.sql b/backend/src/main/resources/db/migration/V37__add_transcription_queue_indexes.sql new file mode 100644 index 00000000..48e142bd --- /dev/null +++ b/backend/src/main/resources/db/migration/V37__add_transcription_queue_indexes.sql @@ -0,0 +1,6 @@ +-- Indexes to support the weekly stats correlated subqueries in findWeeklyStats(). +-- Without these, COUNT(DISTINCT ...) with a date range filter performs a full table scan +-- on every dashboard load. +CREATE INDEX IF NOT EXISTS idx_document_annotations_created_at ON document_annotations(created_at); +CREATE INDEX IF NOT EXISTS idx_transcription_blocks_created_at ON transcription_blocks(created_at); +CREATE INDEX IF NOT EXISTS idx_transcription_blocks_updated_at ON transcription_blocks(updated_at);