From d2fc452c1adcdc78cec350fcf13c561916cf5aef Mon Sep 17 00:00:00 2001 From: Marcel Date: Mon, 20 Apr 2026 20:58:15 +0200 Subject: [PATCH] feat(dto): add uploadedAt to IncompleteDocumentDTO Mapper populates uploadedAt from Document.createdAt so the dashboard enrichment block can show a relative-time meta line ("vor 2 Min.") per issue #296. LocalDateTime matches the convention used by NotificationDTO, DocumentVersionSummary and InviteListItemDTO. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../dto/IncompleteDocumentDTO.java | 4 +++- .../familienarchiv/service/DocumentService.java | 2 +- .../service/DocumentServiceTest.java | 16 ++++++++++++++++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/backend/src/main/java/org/raddatz/familienarchiv/dto/IncompleteDocumentDTO.java b/backend/src/main/java/org/raddatz/familienarchiv/dto/IncompleteDocumentDTO.java index 38cf4e93..5edd7492 100644 --- a/backend/src/main/java/org/raddatz/familienarchiv/dto/IncompleteDocumentDTO.java +++ b/backend/src/main/java/org/raddatz/familienarchiv/dto/IncompleteDocumentDTO.java @@ -2,9 +2,11 @@ package org.raddatz.familienarchiv.dto; import io.swagger.v3.oas.annotations.media.Schema; +import java.time.LocalDateTime; import java.util.UUID; public record IncompleteDocumentDTO( @Schema(requiredMode = Schema.RequiredMode.REQUIRED) UUID id, - @Schema(requiredMode = Schema.RequiredMode.REQUIRED) String title + @Schema(requiredMode = Schema.RequiredMode.REQUIRED) String title, + @Schema(requiredMode = Schema.RequiredMode.REQUIRED) LocalDateTime uploadedAt ) {} diff --git a/backend/src/main/java/org/raddatz/familienarchiv/service/DocumentService.java b/backend/src/main/java/org/raddatz/familienarchiv/service/DocumentService.java index 21618f71..fc26dcc3 100644 --- a/backend/src/main/java/org/raddatz/familienarchiv/service/DocumentService.java +++ b/backend/src/main/java/org/raddatz/familienarchiv/service/DocumentService.java @@ -542,7 +542,7 @@ public class DocumentService { PageRequest pageable = PageRequest.of(0, size, Sort.by(Sort.Direction.DESC, "createdAt")); return documentRepository.findByMetadataCompleteFalse(pageable) .stream() - .map(doc -> new IncompleteDocumentDTO(doc.getId(), doc.getTitle())) + .map(doc -> new IncompleteDocumentDTO(doc.getId(), doc.getTitle(), doc.getCreatedAt())) .toList(); } diff --git a/backend/src/test/java/org/raddatz/familienarchiv/service/DocumentServiceTest.java b/backend/src/test/java/org/raddatz/familienarchiv/service/DocumentServiceTest.java index 6a3aec0f..7eefde78 100644 --- a/backend/src/test/java/org/raddatz/familienarchiv/service/DocumentServiceTest.java +++ b/backend/src/test/java/org/raddatz/familienarchiv/service/DocumentServiceTest.java @@ -390,6 +390,22 @@ class DocumentServiceTest { assertThat(result.get(0).title()).isEqualTo("Unvollständig"); } + @Test + void findIncompleteDocuments_mapsUploadedAtFromCreatedAt() { + java.time.LocalDateTime createdAt = java.time.LocalDateTime.of(2026, 4, 20, 12, 0); + Document doc = Document.builder() + .id(UUID.randomUUID()) + .title("Recent") + .createdAt(createdAt) + .build(); + when(documentRepository.findByMetadataCompleteFalse(any(Pageable.class))) + .thenReturn(new PageImpl<>(List.of(doc))); + + List result = documentService.findIncompleteDocuments(3); + + assertThat(result.get(0).uploadedAt()).isEqualTo(createdAt); + } + @Test void findIncompleteDocuments_passesSizeToPageable() { when(documentRepository.findByMetadataCompleteFalse(any(Pageable.class)))