diff --git a/backend/src/main/java/org/raddatz/familienarchiv/geschichte/GeschichteService.java b/backend/src/main/java/org/raddatz/familienarchiv/geschichte/GeschichteService.java index 857ce314..32afda8a 100644 --- a/backend/src/main/java/org/raddatz/familienarchiv/geschichte/GeschichteService.java +++ b/backend/src/main/java/org/raddatz/familienarchiv/geschichte/GeschichteService.java @@ -71,8 +71,7 @@ public class GeschichteService { AppUser author = g.getAuthor(); GeschichteView.AuthorView authorView = null; if (author != null) { - String displayName = ((author.getFirstName() != null ? author.getFirstName() : "") - + " " + (author.getLastName() != null ? author.getLastName() : "")).trim(); + String displayName = PersonNameFormatter.join(author.getFirstName(), author.getLastName()); if (displayName.isBlank()) displayName = "[Unbekannt]"; authorView = new GeschichteView.AuthorView(author.getId(), displayName); } diff --git a/backend/src/main/java/org/raddatz/familienarchiv/geschichte/PersonNameFormatter.java b/backend/src/main/java/org/raddatz/familienarchiv/geschichte/PersonNameFormatter.java new file mode 100644 index 00000000..91c63231 --- /dev/null +++ b/backend/src/main/java/org/raddatz/familienarchiv/geschichte/PersonNameFormatter.java @@ -0,0 +1,22 @@ +package org.raddatz.familienarchiv.geschichte; + +/** + * Utility for joining a person's first and last name into a display string. + * Centralises the logic that was previously duplicated across GeschichteService + * and JourneyItemService. + */ +public class PersonNameFormatter { + + private PersonNameFormatter() { + // utility class — no instances + } + + public static String join(String firstName, String lastName) { + String first = firstName != null ? firstName.trim() : ""; + String last = lastName != null ? lastName.trim() : ""; + if (first.isEmpty() && last.isEmpty()) return ""; + if (first.isEmpty()) return last; + if (last.isEmpty()) return first; + return first + " " + last; + } +} diff --git a/backend/src/main/java/org/raddatz/familienarchiv/geschichte/journeyitem/JourneyItemService.java b/backend/src/main/java/org/raddatz/familienarchiv/geschichte/journeyitem/JourneyItemService.java index 38259047..82d18816 100644 --- a/backend/src/main/java/org/raddatz/familienarchiv/geschichte/journeyitem/JourneyItemService.java +++ b/backend/src/main/java/org/raddatz/familienarchiv/geschichte/journeyitem/JourneyItemService.java @@ -13,6 +13,7 @@ import org.raddatz.familienarchiv.geschichte.Geschichte; import org.raddatz.familienarchiv.geschichte.GeschichteQueryService; import org.raddatz.familienarchiv.geschichte.GeschichteType; import org.raddatz.familienarchiv.geschichte.DocumentSummary; +import org.raddatz.familienarchiv.geschichte.PersonNameFormatter; import org.raddatz.familienarchiv.person.Person; import org.raddatz.familienarchiv.user.AppUser; import org.raddatz.familienarchiv.user.UserService; @@ -216,7 +217,7 @@ public class JourneyItemService { private static String buildSenderName(Document doc) { Person sender = doc.getSender(); if (sender != null) { - String name = join(sender.getFirstName(), sender.getLastName()); + String name = PersonNameFormatter.join(sender.getFirstName(), sender.getLastName()); if (!name.isBlank()) return name; } String senderText = doc.getSenderText(); @@ -228,7 +229,7 @@ public class JourneyItemService { return receivers.stream() .min(Comparator.comparing(p -> sortKey(p.getLastName()) + " " + sortKey(p.getFirstName()))) .map(p -> { - String name = join(p.getFirstName(), p.getLastName()); + String name = PersonNameFormatter.join(p.getFirstName(), p.getLastName()); return name.isBlank() ? null : name; }) .orElse(null); @@ -239,10 +240,6 @@ public class JourneyItemService { return raw.trim(); } - private static String join(String first, String last) { - return ((first != null ? first : "") + " " + (last != null ? last : "")).trim(); - } - private static String sortKey(String s) { return s != null ? s : ""; }