refactor(audit): rename findDedupedActivityFeed to findRolledUpActivityFeed
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) <noreply@anthropic.com>
This commit is contained in:
@@ -96,7 +96,7 @@ public interface AuditLogQueryRepository extends JpaRepository<AuditLog, UUID> {
|
|||||||
ORDER BY ag.happened_at DESC
|
ORDER BY ag.happened_at DESC
|
||||||
LIMIT :limit
|
LIMIT :limit
|
||||||
""", nativeQuery = true)
|
""", nativeQuery = true)
|
||||||
List<ActivityFeedRow> findDedupedActivityFeed(
|
List<ActivityFeedRow> findRolledUpActivityFeed(
|
||||||
@Param("currentUserId") String currentUserId,
|
@Param("currentUserId") String currentUserId,
|
||||||
@Param("limit") int limit);
|
@Param("limit") int limit);
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ public class AuditLogQueryService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public List<ActivityFeedRow> findActivityFeed(UUID currentUserId, int limit) {
|
public List<ActivityFeedRow> findActivityFeed(UUID currentUserId, int limit) {
|
||||||
return queryRepository.findDedupedActivityFeed(currentUserId.toString(), limit);
|
return queryRepository.findRolledUpActivityFeed(currentUserId.toString(), limit);
|
||||||
}
|
}
|
||||||
|
|
||||||
public PulseStatsRow getPulseStats(OffsetDateTime weekStart, UUID userId) {
|
public PulseStatsRow getPulseStats(OffsetDateTime weekStart, UUID userId) {
|
||||||
|
|||||||
@@ -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 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}')"
|
"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() {
|
void findRolledUpActivityFeed_returnsAnnotationEntry() {
|
||||||
List<ActivityFeedRow> rows = auditLogQueryRepository.findDedupedActivityFeed(USER_ID.toString(), 10);
|
List<ActivityFeedRow> rows = auditLogQueryRepository.findRolledUpActivityFeed(USER_ID.toString(), 10);
|
||||||
|
|
||||||
assertThat(rows).hasSize(1);
|
assertThat(rows).hasSize(1);
|
||||||
assertThat(rows.get(0).getKind()).isEqualTo("ANNOTATION_CREATED");
|
assertThat(rows.get(0).getKind()).isEqualTo("ANNOTATION_CREATED");
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ class AuditLogQueryRepositoryRolledUpTest {
|
|||||||
insertAuditEvent(USER_ID, DOC_ID, "TEXT_SAVED", base.plusSeconds(i * 480L));
|
insertAuditEvent(USER_ID, DOC_ID, "TEXT_SAVED", base.plusSeconds(i * 480L));
|
||||||
}
|
}
|
||||||
|
|
||||||
List<ActivityFeedRow> rows = auditLogQueryRepository.findDedupedActivityFeed(USER_ID.toString(), 40);
|
List<ActivityFeedRow> rows = auditLogQueryRepository.findRolledUpActivityFeed(USER_ID.toString(), 40);
|
||||||
|
|
||||||
assertThat(rows).hasSize(1);
|
assertThat(rows).hasSize(1);
|
||||||
ActivityFeedRow row = rows.get(0);
|
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);
|
||||||
insertAuditEvent(USER_ID, DOC_ID, "TEXT_SAVED", sessionTwoStart.plusSeconds(300));
|
insertAuditEvent(USER_ID, DOC_ID, "TEXT_SAVED", sessionTwoStart.plusSeconds(300));
|
||||||
|
|
||||||
List<ActivityFeedRow> rows = auditLogQueryRepository.findDedupedActivityFeed(USER_ID.toString(), 40);
|
List<ActivityFeedRow> rows = auditLogQueryRepository.findRolledUpActivityFeed(USER_ID.toString(), 40);
|
||||||
|
|
||||||
assertThat(rows).hasSize(2);
|
assertThat(rows).hasSize(2);
|
||||||
assertThat(rows.get(0).getCount()).isEqualTo(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));
|
insertAuditEvent(USER_ID, DOC_ID, "ANNOTATION_CREATED", base.plusSeconds(i * 60L * 30L));
|
||||||
}
|
}
|
||||||
|
|
||||||
List<ActivityFeedRow> rows = auditLogQueryRepository.findDedupedActivityFeed(USER_ID.toString(), 40);
|
List<ActivityFeedRow> rows = auditLogQueryRepository.findRolledUpActivityFeed(USER_ID.toString(), 40);
|
||||||
|
|
||||||
assertThat(rows).hasSize(1);
|
assertThat(rows).hasSize(1);
|
||||||
assertThat(rows.get(0).getCount()).isEqualTo(30);
|
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(60));
|
||||||
insertAuditEvent(USER_ID, DOC_ID, "COMMENT_ADDED", base.plusSeconds(120));
|
insertAuditEvent(USER_ID, DOC_ID, "COMMENT_ADDED", base.plusSeconds(120));
|
||||||
|
|
||||||
List<ActivityFeedRow> rows = auditLogQueryRepository.findDedupedActivityFeed(USER_ID.toString(), 40);
|
List<ActivityFeedRow> rows = auditLogQueryRepository.findRolledUpActivityFeed(USER_ID.toString(), 40);
|
||||||
|
|
||||||
assertThat(rows).hasSize(3);
|
assertThat(rows).hasSize(3);
|
||||||
assertThat(rows).allSatisfy(r -> {
|
assertThat(rows).allSatisfy(r -> {
|
||||||
@@ -143,7 +143,7 @@ class AuditLogQueryRepositoryRolledUpTest {
|
|||||||
insertAuditEvent(USER_ID, DOC_ID, "FILE_UPLOADED", rollupStart.plusSeconds(300));
|
insertAuditEvent(USER_ID, DOC_ID, "FILE_UPLOADED", rollupStart.plusSeconds(300));
|
||||||
insertAuditEvent(USER_ID, OTHER_DOC_ID, "FILE_UPLOADED", rollupStart.plusSeconds(900));
|
insertAuditEvent(USER_ID, OTHER_DOC_ID, "FILE_UPLOADED", rollupStart.plusSeconds(900));
|
||||||
|
|
||||||
List<ActivityFeedRow> rows = auditLogQueryRepository.findDedupedActivityFeed(USER_ID.toString(), 40);
|
List<ActivityFeedRow> rows = auditLogQueryRepository.findRolledUpActivityFeed(USER_ID.toString(), 40);
|
||||||
|
|
||||||
assertThat(rows).hasSize(2);
|
assertThat(rows).hasSize(2);
|
||||||
assertThat(rows).anySatisfy(r -> {
|
assertThat(rows).anySatisfy(r -> {
|
||||||
|
|||||||
Reference in New Issue
Block a user