feat(dashboard): add findContributorsPerDocument query and ContributorRow projection

This commit is contained in:
Marcel
2026-04-19 18:18:26 +02:00
parent 10dbce1c70
commit 37203e96ab
2 changed files with 32 additions and 0 deletions

View File

@@ -85,4 +85,26 @@ public interface AuditLogQueryRepository extends JpaRepository<AuditLog, UUID> {
List<Object[]> findMostRecentActorPerDocument( List<Object[]> findMostRecentActorPerDocument(
@Param("documentIds") List<UUID> documentIds, @Param("documentIds") List<UUID> documentIds,
@Param("kind") String kind); @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<ContributorRow> findContributorsPerDocument(@Param("documentIds") List<UUID> documentIds);
} }

View File

@@ -0,0 +1,10 @@
package org.raddatz.familienarchiv.dashboard;
import java.util.UUID;
public interface ContributorRow {
UUID getDocumentId();
String getActorInitials();
String getActorColor();
String getActorName();
}