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);