From eda30f53fa8b67b9a3bd23201b4d9395f5bae7c4 Mon Sep 17 00:00:00 2001 From: Marcel Date: Mon, 20 Apr 2026 16:04:39 +0200 Subject: [PATCH] refactor(audit): rename findDedupedActivityFeed to findRolledUpActivityFeed MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The method no longer deduplicates by hour-trunc — it performs session-style rollup via LAG()+120-min gap. Rename aligns the public name with the behavior. Part of #285. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../familienarchiv/audit/AuditLogQueryRepository.java | 2 +- .../familienarchiv/audit/AuditLogQueryService.java | 2 +- .../AuditLogQueryRepositoryIntegrationTest.java | 4 ++-- .../dashboard/AuditLogQueryRepositoryRolledUpTest.java | 10 +++++----- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/backend/src/main/java/org/raddatz/familienarchiv/audit/AuditLogQueryRepository.java b/backend/src/main/java/org/raddatz/familienarchiv/audit/AuditLogQueryRepository.java index cc5df3ec..59e930d3 100644 --- a/backend/src/main/java/org/raddatz/familienarchiv/audit/AuditLogQueryRepository.java +++ b/backend/src/main/java/org/raddatz/familienarchiv/audit/AuditLogQueryRepository.java @@ -96,7 +96,7 @@ public interface AuditLogQueryRepository extends JpaRepository { ORDER BY ag.happened_at DESC LIMIT :limit """, nativeQuery = true) - List findDedupedActivityFeed( + List findRolledUpActivityFeed( @Param("currentUserId") String currentUserId, @Param("limit") int limit); diff --git a/backend/src/main/java/org/raddatz/familienarchiv/audit/AuditLogQueryService.java b/backend/src/main/java/org/raddatz/familienarchiv/audit/AuditLogQueryService.java index c007f4bb..930ef1a4 100644 --- a/backend/src/main/java/org/raddatz/familienarchiv/audit/AuditLogQueryService.java +++ b/backend/src/main/java/org/raddatz/familienarchiv/audit/AuditLogQueryService.java @@ -17,7 +17,7 @@ public class AuditLogQueryService { } public List findActivityFeed(UUID currentUserId, int limit) { - return queryRepository.findDedupedActivityFeed(currentUserId.toString(), limit); + return queryRepository.findRolledUpActivityFeed(currentUserId.toString(), limit); } public PulseStatsRow getPulseStats(OffsetDateTime weekStart, UUID userId) { diff --git a/backend/src/test/java/org/raddatz/familienarchiv/dashboard/AuditLogQueryRepositoryIntegrationTest.java b/backend/src/test/java/org/raddatz/familienarchiv/dashboard/AuditLogQueryRepositoryIntegrationTest.java index 3862c0d7..e73553c5 100644 --- a/backend/src/test/java/org/raddatz/familienarchiv/dashboard/AuditLogQueryRepositoryIntegrationTest.java +++ b/backend/src/test/java/org/raddatz/familienarchiv/dashboard/AuditLogQueryRepositoryIntegrationTest.java @@ -49,8 +49,8 @@ class AuditLogQueryRepositoryIntegrationTest { "INSERT INTO documents (id, title, original_filename, status) VALUES ('bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb', 'Test Doc', 'test.pdf', 'PLACEHOLDER')", "INSERT INTO audit_log (kind, actor_id, document_id, payload) VALUES ('ANNOTATION_CREATED', 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa', 'bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb', '{\"pageNumber\":1}')" }) - void findDedupedActivityFeed_returnsAnnotationEntry() { - List rows = auditLogQueryRepository.findDedupedActivityFeed(USER_ID.toString(), 10); + void findRolledUpActivityFeed_returnsAnnotationEntry() { + List rows = auditLogQueryRepository.findRolledUpActivityFeed(USER_ID.toString(), 10); assertThat(rows).hasSize(1); assertThat(rows.get(0).getKind()).isEqualTo("ANNOTATION_CREATED"); diff --git a/backend/src/test/java/org/raddatz/familienarchiv/dashboard/AuditLogQueryRepositoryRolledUpTest.java b/backend/src/test/java/org/raddatz/familienarchiv/dashboard/AuditLogQueryRepositoryRolledUpTest.java index 353a4bd4..22b5f89a 100644 --- a/backend/src/test/java/org/raddatz/familienarchiv/dashboard/AuditLogQueryRepositoryRolledUpTest.java +++ b/backend/src/test/java/org/raddatz/familienarchiv/dashboard/AuditLogQueryRepositoryRolledUpTest.java @@ -70,7 +70,7 @@ class AuditLogQueryRepositoryRolledUpTest { insertAuditEvent(USER_ID, DOC_ID, "TEXT_SAVED", base.plusSeconds(i * 480L)); } - List rows = auditLogQueryRepository.findDedupedActivityFeed(USER_ID.toString(), 40); + List rows = auditLogQueryRepository.findRolledUpActivityFeed(USER_ID.toString(), 40); assertThat(rows).hasSize(1); ActivityFeedRow row = rows.get(0); @@ -92,7 +92,7 @@ class AuditLogQueryRepositoryRolledUpTest { insertAuditEvent(USER_ID, DOC_ID, "TEXT_SAVED", sessionTwoStart); insertAuditEvent(USER_ID, DOC_ID, "TEXT_SAVED", sessionTwoStart.plusSeconds(300)); - List rows = auditLogQueryRepository.findDedupedActivityFeed(USER_ID.toString(), 40); + List rows = auditLogQueryRepository.findRolledUpActivityFeed(USER_ID.toString(), 40); assertThat(rows).hasSize(2); assertThat(rows.get(0).getCount()).isEqualTo(2); @@ -109,7 +109,7 @@ class AuditLogQueryRepositoryRolledUpTest { insertAuditEvent(USER_ID, DOC_ID, "ANNOTATION_CREATED", base.plusSeconds(i * 60L * 30L)); } - List rows = auditLogQueryRepository.findDedupedActivityFeed(USER_ID.toString(), 40); + List rows = auditLogQueryRepository.findRolledUpActivityFeed(USER_ID.toString(), 40); assertThat(rows).hasSize(1); assertThat(rows.get(0).getCount()).isEqualTo(30); @@ -125,7 +125,7 @@ class AuditLogQueryRepositoryRolledUpTest { insertAuditEvent(USER_ID, DOC_ID, "COMMENT_ADDED", base.plusSeconds(60)); insertAuditEvent(USER_ID, DOC_ID, "COMMENT_ADDED", base.plusSeconds(120)); - List rows = auditLogQueryRepository.findDedupedActivityFeed(USER_ID.toString(), 40); + List rows = auditLogQueryRepository.findRolledUpActivityFeed(USER_ID.toString(), 40); assertThat(rows).hasSize(3); assertThat(rows).allSatisfy(r -> { @@ -143,7 +143,7 @@ class AuditLogQueryRepositoryRolledUpTest { insertAuditEvent(USER_ID, DOC_ID, "FILE_UPLOADED", rollupStart.plusSeconds(300)); insertAuditEvent(USER_ID, OTHER_DOC_ID, "FILE_UPLOADED", rollupStart.plusSeconds(900)); - List rows = auditLogQueryRepository.findDedupedActivityFeed(USER_ID.toString(), 40); + List rows = auditLogQueryRepository.findRolledUpActivityFeed(USER_ID.toString(), 40); assertThat(rows).hasSize(2); assertThat(rows).anySatisfy(r -> {