From 1d3a3b3338061ec91a8dc6f2b189640964ff753b Mon Sep 17 00:00:00 2001 From: Marcel Date: Sun, 26 Apr 2026 15:33:30 +0200 Subject: [PATCH] refactor(audit): extract groupChangePayload() from adminUpdateUser Co-Authored-By: Claude Sonnet 4.6 --- .../familienarchiv/service/UserService.java | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/backend/src/main/java/org/raddatz/familienarchiv/service/UserService.java b/backend/src/main/java/org/raddatz/familienarchiv/service/UserService.java index 251acae4..eb136f71 100644 --- a/backend/src/main/java/org/raddatz/familienarchiv/service/UserService.java +++ b/backend/src/main/java/org/raddatz/familienarchiv/service/UserService.java @@ -183,27 +183,27 @@ public class UserService { } if (dto.getGroupIds() != null) { - Set beforeIds = user.getGroups().stream().map(UserGroup::getId).collect(toSet()); - Set beforeGroups = new HashSet<>(user.getGroups()); - Set newGroups = new HashSet<>(groupRepository.findAllById(dto.getGroupIds())); - user.setGroups(newGroups); - Set afterIds = newGroups.stream().map(UserGroup::getId).collect(toSet()); - if (!beforeIds.equals(afterIds)) { - List added = newGroups.stream() - .filter(g -> !beforeIds.contains(g.getId())) - .map(UserGroup::getName).toList(); - List removed = beforeGroups.stream() - .filter(g -> !afterIds.contains(g.getId())) - .map(UserGroup::getName).toList(); - auditService.logAfterCommit(AuditKind.GROUP_MEMBERSHIP_CHANGED, actorId, null, - Map.of("userId", id.toString(), "email", user.getEmail(), - "addedGroups", added, "removedGroups", removed)); - } + Set before = new HashSet<>(user.getGroups()); + Set after = new HashSet<>(groupRepository.findAllById(dto.getGroupIds())); + user.setGroups(after); + groupChangePayload(before, after, id, user.getEmail()) + .ifPresent(payload -> auditService.logAfterCommit(AuditKind.GROUP_MEMBERSHIP_CHANGED, actorId, null, payload)); } return userRepository.save(user); } + private Optional> groupChangePayload( + Set before, Set after, UUID userId, String email) { + Set beforeIds = before.stream().map(UserGroup::getId).collect(toSet()); + Set afterIds = after.stream().map(UserGroup::getId).collect(toSet()); + if (beforeIds.equals(afterIds)) return Optional.empty(); + List added = after.stream().filter(g -> !beforeIds.contains(g.getId())).map(UserGroup::getName).toList(); + List removed = before.stream().filter(g -> !afterIds.contains(g.getId())).map(UserGroup::getName).toList(); + return Optional.of(Map.of("userId", userId.toString(), "email", email, + "addedGroups", added, "removedGroups", removed)); + } + @Transactional public void changePassword(UUID userId, ChangePasswordDTO dto) { AppUser user = getById(userId);