diff --git a/backend/src/main/java/org/raddatz/familienarchiv/audit/ActivityFeedRow.java b/backend/src/main/java/org/raddatz/familienarchiv/audit/ActivityFeedRow.java index 384b311e..59cf64c9 100644 --- a/backend/src/main/java/org/raddatz/familienarchiv/audit/ActivityFeedRow.java +++ b/backend/src/main/java/org/raddatz/familienarchiv/audit/ActivityFeedRow.java @@ -12,4 +12,6 @@ public interface ActivityFeedRow { UUID getDocumentId(); Instant getHappenedAt(); boolean isYouMentioned(); + int getCount(); + Instant getHappenedAtUntil(); } 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 2d725c69..82ba27a2 100644 --- a/backend/src/main/java/org/raddatz/familienarchiv/audit/AuditLogQueryRepository.java +++ b/backend/src/main/java/org/raddatz/familienarchiv/audit/AuditLogQueryRepository.java @@ -39,7 +39,9 @@ public interface AuditLogQueryRepository extends JpaRepository { a.document_id AS documentId, a.happened_at AS happened_at, (a.kind = 'MENTION_CREATED' - AND a.payload->>'mentionedUserId' = :currentUserId) AS youMentioned + AND a.payload->>'mentionedUserId' = :currentUserId) AS youMentioned, + 1 AS count, + CAST(NULL AS TIMESTAMPTZ) AS happenedAtUntil FROM audit_log a LEFT JOIN users u ON u.id = a.actor_id WHERE a.kind IN ('TEXT_SAVED','FILE_UPLOADED','ANNOTATION_CREATED','COMMENT_ADDED','MENTION_CREATED') diff --git a/backend/src/main/java/org/raddatz/familienarchiv/dashboard/ActivityFeedItemDTO.java b/backend/src/main/java/org/raddatz/familienarchiv/dashboard/ActivityFeedItemDTO.java index 0fcdd312..444c838d 100644 --- a/backend/src/main/java/org/raddatz/familienarchiv/dashboard/ActivityFeedItemDTO.java +++ b/backend/src/main/java/org/raddatz/familienarchiv/dashboard/ActivityFeedItemDTO.java @@ -14,5 +14,7 @@ public record ActivityFeedItemDTO( @Schema(requiredMode = Schema.RequiredMode.REQUIRED) UUID documentId, @Schema(requiredMode = Schema.RequiredMode.REQUIRED) String documentTitle, @Schema(requiredMode = Schema.RequiredMode.REQUIRED) OffsetDateTime happenedAt, - @Schema(requiredMode = Schema.RequiredMode.REQUIRED) boolean youMentioned + @Schema(requiredMode = Schema.RequiredMode.REQUIRED) boolean youMentioned, + @Schema(requiredMode = Schema.RequiredMode.REQUIRED) int count, + @Nullable OffsetDateTime happenedAtUntil ) {} diff --git a/backend/src/main/java/org/raddatz/familienarchiv/dashboard/DashboardService.java b/backend/src/main/java/org/raddatz/familienarchiv/dashboard/DashboardService.java index d749a164..b7be271f 100644 --- a/backend/src/main/java/org/raddatz/familienarchiv/dashboard/DashboardService.java +++ b/backend/src/main/java/org/raddatz/familienarchiv/dashboard/DashboardService.java @@ -130,13 +130,18 @@ public class DashboardService { ? new ActivityActorDTO(row.getActorInitials(), row.getActorColor(), row.getActorName()) : null; String docTitle = titleCache.getOrDefault(row.getDocumentId(), ""); + OffsetDateTime happenedAtUntil = row.getHappenedAtUntil() != null + ? row.getHappenedAtUntil().atOffset(ZoneOffset.UTC) + : null; return new ActivityFeedItemDTO( org.raddatz.familienarchiv.audit.AuditKind.valueOf(row.getKind()), actor, row.getDocumentId(), docTitle, row.getHappenedAt().atOffset(ZoneOffset.UTC), - row.isYouMentioned() + row.isYouMentioned(), + row.getCount(), + happenedAtUntil ); }).toList(); } 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 5875baf5..3862c0d7 100644 --- a/backend/src/test/java/org/raddatz/familienarchiv/dashboard/AuditLogQueryRepositoryIntegrationTest.java +++ b/backend/src/test/java/org/raddatz/familienarchiv/dashboard/AuditLogQueryRepositoryIntegrationTest.java @@ -56,6 +56,8 @@ class AuditLogQueryRepositoryIntegrationTest { assertThat(rows.get(0).getKind()).isEqualTo("ANNOTATION_CREATED"); assertThat(rows.get(0).getDocumentId()).isEqualTo(DOC_ID); assertThat(rows.get(0).getHappenedAt()).isNotNull(); + assertThat(rows.get(0).getCount()).isEqualTo(1); + assertThat(rows.get(0).getHappenedAtUntil()).isNull(); } @Test diff --git a/backend/src/test/java/org/raddatz/familienarchiv/dashboard/DashboardServiceTest.java b/backend/src/test/java/org/raddatz/familienarchiv/dashboard/DashboardServiceTest.java index c62fdb8c..19692ad4 100644 --- a/backend/src/test/java/org/raddatz/familienarchiv/dashboard/DashboardServiceTest.java +++ b/backend/src/test/java/org/raddatz/familienarchiv/dashboard/DashboardServiceTest.java @@ -104,6 +104,8 @@ class DashboardServiceTest { public UUID getDocumentId() { return docId; } public Instant getHappenedAt() { return Instant.now(); } public boolean isYouMentioned() { return false; } + public int getCount() { return 1; } + public Instant getHappenedAtUntil() { return null; } }; } }