From 4c1470b14850684df993836062f445af4f782b0d Mon Sep 17 00:00:00 2001 From: Sheldan <5037282+Sheldan@users.noreply.github.com> Date: Sat, 1 May 2021 12:55:47 +0200 Subject: [PATCH] [AB-245] roles are required to be sorted when syncing users, this led to incorrect role assignments --- .../experience/service/AUserExperienceServiceBean.java | 3 +++ .../experience/service/ExperienceRoleServiceBean.java | 1 + 2 files changed, 4 insertions(+) diff --git a/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/service/AUserExperienceServiceBean.java b/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/service/AUserExperienceServiceBean.java index 94c407e7f..b5f73eed6 100644 --- a/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/service/AUserExperienceServiceBean.java +++ b/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/service/AUserExperienceServiceBean.java @@ -399,6 +399,7 @@ public class AUserExperienceServiceBean implements AUserExperienceService { List aUserExperiences = userExperienceManagementService.loadAllUsers(server); log.info("Found {} users to synchronize", aUserExperiences.size()); List roles = experienceRoleManagementService.getExperienceRolesForServer(server); + roles.sort(Comparator.comparing(role -> role.getLevel().getLevel())); for (int i = 0; i < aUserExperiences.size(); i++) { AUserExperience userExperience = aUserExperiences.get(i); log.debug("Synchronizing {} out of {}", i, aUserExperiences.size()); @@ -413,6 +414,7 @@ public class AUserExperienceServiceBean implements AUserExperienceService { List aUserExperiences = userExperienceManagementService.loadAllUsers(server); log.info("Found {} users to synchronize", aUserExperiences.size()); List roles = experienceRoleManagementService.getExperienceRolesForServer(server); + roles.sort(Comparator.comparing(role -> role.getLevel().getLevel())); CompletableFutureList calculations = executeActionOnUserExperiencesWithFeedBack(aUserExperiences, channel, (AUserExperience experience) -> updateUserRole(experience, roles, experience.getLevelOrDefault())); return calculations.getMainFuture().thenAccept(aVoid -> self.syncRolesInStorage(calculations.getObjects()) @@ -502,6 +504,7 @@ public class AUserExperienceServiceBean implements AUserExperienceService { AUserInAServer user = userExperience.getUser(); log.info("Synchronizing for user {} in server {}", user.getUserReference().getId(), user.getServerReference().getId()); List roles = experienceRoleManagementService.getExperienceRolesForServer(user.getServerReference()); + roles.sort(Comparator.comparing(role -> role.getLevel().getLevel())); return updateUserRole(userExperience, roles, userExperience.getLevelOrDefault()); } diff --git a/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/service/ExperienceRoleServiceBean.java b/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/service/ExperienceRoleServiceBean.java index e133e085d..97cf58980 100644 --- a/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/service/ExperienceRoleServiceBean.java +++ b/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/service/ExperienceRoleServiceBean.java @@ -92,6 +92,7 @@ public class ExperienceRoleServiceBean implements ExperienceRoleService { log.info("Recalculating the roles for {} users, because their current role was removed from experience tracking.", roleInServer.getUsers().size()); List roles = experienceRoleManagementService.getExperienceRolesForServer(role.getServer()); roles.removeIf(role1 -> role1.getId().equals(roleInServer.getId())); + roles.sort(Comparator.comparing(innerRole -> innerRole.getLevel().getLevel())); Long roleId = role.getId(); CompletableFutureList calculationResults = userExperienceService.executeActionOnUserExperiencesWithFeedBack(roleInServer.getUsers(), channel, (AUserExperience ex) -> userExperienceService.updateUserRole(ex, roles, ex.getLevelOrDefault()));