From 5146aeb5682c2ba95d0a6e48740689b287f31c2c Mon Sep 17 00:00:00 2001 From: Marcel Date: Thu, 7 May 2026 18:25:24 +0200 Subject: [PATCH] feat(document): add DocumentSort.UPDATED_AT for reader dashboard feed Co-Authored-By: Claude Sonnet 4.6 --- .../familienarchiv/document/DocumentService.java | 1 + .../familienarchiv/document/DocumentSort.java | 2 +- .../V61__add_idx_documents_updated_at.sql | 1 + .../document/DocumentServiceTest.java | 15 +++++++++++++++ 4 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 backend/src/main/resources/db/migration/V61__add_idx_documents_updated_at.sql diff --git a/backend/src/main/java/org/raddatz/familienarchiv/document/DocumentService.java b/backend/src/main/java/org/raddatz/familienarchiv/document/DocumentService.java index cca184d8..31e2e85d 100644 --- a/backend/src/main/java/org/raddatz/familienarchiv/document/DocumentService.java +++ b/backend/src/main/java/org/raddatz/familienarchiv/document/DocumentService.java @@ -727,6 +727,7 @@ public class DocumentService { return switch (sort) { case TITLE -> Sort.by(direction, "title"); case UPLOAD_DATE -> Sort.by(direction, "createdAt"); + case UPDATED_AT -> Sort.by(direction, "updatedAt"); default -> Sort.by(direction, "documentDate"); }; } diff --git a/backend/src/main/java/org/raddatz/familienarchiv/document/DocumentSort.java b/backend/src/main/java/org/raddatz/familienarchiv/document/DocumentSort.java index 03a616b0..9334d53a 100644 --- a/backend/src/main/java/org/raddatz/familienarchiv/document/DocumentSort.java +++ b/backend/src/main/java/org/raddatz/familienarchiv/document/DocumentSort.java @@ -1,5 +1,5 @@ package org.raddatz.familienarchiv.document; public enum DocumentSort { - DATE, TITLE, SENDER, RECEIVER, UPLOAD_DATE, RELEVANCE + DATE, TITLE, SENDER, RECEIVER, UPLOAD_DATE, UPDATED_AT, RELEVANCE } diff --git a/backend/src/main/resources/db/migration/V61__add_idx_documents_updated_at.sql b/backend/src/main/resources/db/migration/V61__add_idx_documents_updated_at.sql new file mode 100644 index 00000000..bfc9899e --- /dev/null +++ b/backend/src/main/resources/db/migration/V61__add_idx_documents_updated_at.sql @@ -0,0 +1 @@ +CREATE INDEX IF NOT EXISTS idx_documents_updated_at ON documents(updated_at DESC); diff --git a/backend/src/test/java/org/raddatz/familienarchiv/document/DocumentServiceTest.java b/backend/src/test/java/org/raddatz/familienarchiv/document/DocumentServiceTest.java index 2637a9e7..99198452 100644 --- a/backend/src/test/java/org/raddatz/familienarchiv/document/DocumentServiceTest.java +++ b/backend/src/test/java/org/raddatz/familienarchiv/document/DocumentServiceTest.java @@ -1403,6 +1403,21 @@ class DocumentServiceTest { assertThat(result.items()).hasSize(1); // only the slice is enriched } + @Test + void searchDocuments_UPDATED_AT_sort_resolves_to_updatedAt_field() { + ArgumentCaptor captor = ArgumentCaptor.forClass(Pageable.class); + when(documentRepository.findAll(any(org.springframework.data.jpa.domain.Specification.class), any(Pageable.class))) + .thenReturn(new PageImpl<>(List.of())); + + documentService.searchDocuments(null, null, null, null, null, null, null, null, + DocumentSort.UPDATED_AT, "DESC", null, + org.springframework.data.domain.PageRequest.of(0, 5)); + + verify(documentRepository).findAll(any(org.springframework.data.jpa.domain.Specification.class), captor.capture()); + assertThat(captor.getValue().getSort()) + .isEqualTo(Sort.by(Sort.Direction.DESC, "updatedAt")); + } + @Test void searchDocuments_senderSort_slicesInMemoryAndReportsFullTotal() { // Fixture: 120 docs with senders; request page 1, size 50 → expect 50 items