refactor(audit): extract groupChangePayload() from adminUpdateUser
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -183,27 +183,27 @@ public class UserService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (dto.getGroupIds() != null) {
|
if (dto.getGroupIds() != null) {
|
||||||
Set<UUID> beforeIds = user.getGroups().stream().map(UserGroup::getId).collect(toSet());
|
Set<UserGroup> before = new HashSet<>(user.getGroups());
|
||||||
Set<UserGroup> beforeGroups = new HashSet<>(user.getGroups());
|
Set<UserGroup> after = new HashSet<>(groupRepository.findAllById(dto.getGroupIds()));
|
||||||
Set<UserGroup> newGroups = new HashSet<>(groupRepository.findAllById(dto.getGroupIds()));
|
user.setGroups(after);
|
||||||
user.setGroups(newGroups);
|
groupChangePayload(before, after, id, user.getEmail())
|
||||||
Set<UUID> afterIds = newGroups.stream().map(UserGroup::getId).collect(toSet());
|
.ifPresent(payload -> auditService.logAfterCommit(AuditKind.GROUP_MEMBERSHIP_CHANGED, actorId, null, payload));
|
||||||
if (!beforeIds.equals(afterIds)) {
|
|
||||||
List<String> added = newGroups.stream()
|
|
||||||
.filter(g -> !beforeIds.contains(g.getId()))
|
|
||||||
.map(UserGroup::getName).toList();
|
|
||||||
List<String> 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));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return userRepository.save(user);
|
return userRepository.save(user);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Optional<Map<String, Object>> groupChangePayload(
|
||||||
|
Set<UserGroup> before, Set<UserGroup> after, UUID userId, String email) {
|
||||||
|
Set<UUID> beforeIds = before.stream().map(UserGroup::getId).collect(toSet());
|
||||||
|
Set<UUID> afterIds = after.stream().map(UserGroup::getId).collect(toSet());
|
||||||
|
if (beforeIds.equals(afterIds)) return Optional.empty();
|
||||||
|
List<String> added = after.stream().filter(g -> !beforeIds.contains(g.getId())).map(UserGroup::getName).toList();
|
||||||
|
List<String> 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
|
@Transactional
|
||||||
public void changePassword(UUID userId, ChangePasswordDTO dto) {
|
public void changePassword(UUID userId, ChangePasswordDTO dto) {
|
||||||
AppUser user = getById(userId);
|
AppUser user = getById(userId);
|
||||||
|
|||||||
Reference in New Issue
Block a user