From 37203e96ab163ed857294d87240e4f40d7418304 Mon Sep 17 00:00:00 2001 From: Marcel Date: Sun, 19 Apr 2026 18:18:26 +0200 Subject: [PATCH] feat(dashboard): add findContributorsPerDocument query and ContributorRow projection --- .../dashboard/AuditLogQueryRepository.java | 22 +++++++++++++++++++ .../dashboard/ContributorRow.java | 10 +++++++++ 2 files changed, 32 insertions(+) create mode 100644 backend/src/main/java/org/raddatz/familienarchiv/dashboard/ContributorRow.java diff --git a/backend/src/main/java/org/raddatz/familienarchiv/dashboard/AuditLogQueryRepository.java b/backend/src/main/java/org/raddatz/familienarchiv/dashboard/AuditLogQueryRepository.java index 83d9a627..6d1db9ef 100644 --- a/backend/src/main/java/org/raddatz/familienarchiv/dashboard/AuditLogQueryRepository.java +++ b/backend/src/main/java/org/raddatz/familienarchiv/dashboard/AuditLogQueryRepository.java @@ -85,4 +85,26 @@ public interface AuditLogQueryRepository extends JpaRepository { List findMostRecentActorPerDocument( @Param("documentIds") List documentIds, @Param("kind") String kind); + + @Query(value = """ + SELECT + a.document_id AS documentId, + CASE + WHEN u.first_name IS NOT NULL AND u.last_name IS NOT NULL + THEN UPPER(LEFT(u.first_name, 1)) || UPPER(LEFT(u.last_name, 1)) + WHEN u.first_name IS NOT NULL THEN UPPER(LEFT(u.first_name, 1)) + WHEN u.last_name IS NOT NULL THEN UPPER(LEFT(u.last_name, 1)) + ELSE '?' + END AS actorInitials, + COALESCE(u.color, '') AS actorColor, + CONCAT_WS(' ', u.first_name, u.last_name) AS actorName + FROM audit_log a + JOIN users u ON u.id = a.actor_id + WHERE a.kind IN ('ANNOTATION_CREATED', 'TEXT_SAVED', 'BLOCK_REVIEWED') + AND a.document_id IN :documentIds + AND a.actor_id IS NOT NULL + GROUP BY a.document_id, a.actor_id, u.first_name, u.last_name, u.color + ORDER BY a.document_id, MIN(a.happened_at) + """, nativeQuery = true) + List findContributorsPerDocument(@Param("documentIds") List documentIds); } diff --git a/backend/src/main/java/org/raddatz/familienarchiv/dashboard/ContributorRow.java b/backend/src/main/java/org/raddatz/familienarchiv/dashboard/ContributorRow.java new file mode 100644 index 00000000..a60a5ca4 --- /dev/null +++ b/backend/src/main/java/org/raddatz/familienarchiv/dashboard/ContributorRow.java @@ -0,0 +1,10 @@ +package org.raddatz.familienarchiv.dashboard; + +import java.util.UUID; + +public interface ContributorRow { + UUID getDocumentId(); + String getActorInitials(); + String getActorColor(); + String getActorName(); +}