From 4c620619d49ef2f21318224e3b1dca17ab689b88 Mon Sep 17 00:00:00 2001 From: Marcel Date: Sat, 6 Jun 2026 16:46:40 +0200 Subject: [PATCH] fix(search): formal Sie form in German error strings; clean up DocumentService imports - error_smart_search_unavailable/rate_limited now use "Sie" (formal) to match the tone of all existing German error messages - Replace inline FQNs in DocumentService.buildPersonSpec with proper JoinType + Predicate imports Co-Authored-By: Claude Sonnet 4.6 --- .../raddatz/familienarchiv/document/DocumentService.java | 8 +++++--- frontend/messages/de.json | 4 ++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/backend/src/main/java/org/raddatz/familienarchiv/document/DocumentService.java b/backend/src/main/java/org/raddatz/familienarchiv/document/DocumentService.java index 6ce9ba6e..4f69922c 100644 --- a/backend/src/main/java/org/raddatz/familienarchiv/document/DocumentService.java +++ b/backend/src/main/java/org/raddatz/familienarchiv/document/DocumentService.java @@ -32,6 +32,8 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; +import jakarta.persistence.criteria.JoinType; +import jakarta.persistence.criteria.Predicate; import org.springframework.data.jpa.domain.Specification; import org.raddatz.familienarchiv.exception.DomainException; import org.raddatz.familienarchiv.exception.ErrorCode; @@ -1044,14 +1046,14 @@ public class DocumentService { private Specification buildPersonSpec(Person person, LocalDate from, LocalDate to) { return (root, query, cb) -> { if (query != null) query.distinct(true); - var receiversJoin = root.join("receivers", jakarta.persistence.criteria.JoinType.LEFT); + var receiversJoin = root.join("receivers", JoinType.LEFT); var senderPredicate = cb.equal(root.get("sender"), person); var receiverPredicate = cb.equal(receiversJoin, person); var personPredicate = cb.or(senderPredicate, receiverPredicate); - var predicates = new java.util.ArrayList<>(java.util.List.of(personPredicate)); + var predicates = new ArrayList<>(List.of(personPredicate)); if (from != null) predicates.add(cb.greaterThanOrEqualTo(root.get("documentDate"), from)); if (to != null) predicates.add(cb.lessThanOrEqualTo(root.get("documentDate"), to)); - return cb.and(predicates.toArray(new jakarta.persistence.criteria.Predicate[0])); + return cb.and(predicates.toArray(new Predicate[0])); }; } diff --git a/frontend/messages/de.json b/frontend/messages/de.json index 946c39cc..e4d29d12 100644 --- a/frontend/messages/de.json +++ b/frontend/messages/de.json @@ -22,8 +22,8 @@ "error_forbidden": "Sie haben keine Berechtigung für diese Aktion.", "error_csrf_token_missing": "Sitzungsfehler. Bitte laden Sie die Seite neu.", "error_too_many_login_attempts": "Zu viele Anmeldeversuche. Bitte versuchen Sie es später erneut.", - "error_smart_search_unavailable": "Die intelligente Suche ist momentan nicht verfügbar. Bitte nutze die normale Suche.", - "error_smart_search_rate_limited": "Du hast die Suchfunktion zu häufig genutzt. Bitte warte eine Minute.", + "error_smart_search_unavailable": "Die intelligente Suche ist momentan nicht verfügbar. Bitte nutzen Sie die normale Suche.", + "error_smart_search_rate_limited": "Sie haben die Suchfunktion zu häufig genutzt. Bitte warten Sie eine Minute.", "smart_search_keywords_not_applied": "Schlüsselwörter konnten bei dieser Suche nicht berücksichtigt werden.", "error_validation_error": "Die Eingabe ist ungültig.", "error_internal_error": "Ein unerwarteter Fehler ist aufgetreten.",