mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-04-14 11:48:16 +00:00
[AB-79] fix not applying role for re-joining users upon sync
This commit is contained in:
@@ -46,7 +46,7 @@ public class JoiningUserRoleListener implements AsyncJoinListener {
|
|||||||
Optional<AUserExperience> userExperienceOptional = userExperienceManagementService.findByUserInServerIdOptional(aUserInAServer.getUserInServerId());
|
Optional<AUserExperience> userExperienceOptional = userExperienceManagementService.findByUserInServerIdOptional(aUserInAServer.getUserInServerId());
|
||||||
if(userExperienceOptional.isPresent()) {
|
if(userExperienceOptional.isPresent()) {
|
||||||
log.info("User {} joined {} with previous experience. Setting up experience role again (if necessary).", model.getJoiningUser().getUserId(), model.getServerId());
|
log.info("User {} joined {} with previous experience. Setting up experience role again (if necessary).", model.getJoiningUser().getUserId(), model.getServerId());
|
||||||
userExperienceService.syncForSingleUser(userExperienceOptional.get(), model.getMember()).thenAccept(result ->
|
userExperienceService.syncForSingleUser(userExperienceOptional.get(), model.getMember(), true).thenAccept(result ->
|
||||||
log.info("Finished re-assigning experience for re-joining user {} in server {}.", model.getJoiningUser().getUserId(), model.getServerId())
|
log.info("Finished re-assigning experience for re-joining user {} in server {}.", model.getJoiningUser().getUserId(), model.getServerId())
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ public class MemberPendingRoleListener implements AsyncUpdatePendingListener {
|
|||||||
Optional<AUserExperience> userExperienceOptional = userExperienceManagementService.findByUserInServerIdOptional(aUserInAServer.getUserInServerId());
|
Optional<AUserExperience> userExperienceOptional = userExperienceManagementService.findByUserInServerIdOptional(aUserInAServer.getUserInServerId());
|
||||||
if(userExperienceOptional.isPresent()) {
|
if(userExperienceOptional.isPresent()) {
|
||||||
log.info("User {} updated pending status {} with previous experience. Setting up experience role again (if necessary).", model.getUser().getUserId(), model.getServerId());
|
log.info("User {} updated pending status {} with previous experience. Setting up experience role again (if necessary).", model.getUser().getUserId(), model.getServerId());
|
||||||
userExperienceService.syncForSingleUser(userExperienceOptional.get(), model.getMember()).thenAccept(result ->
|
userExperienceService.syncForSingleUser(userExperienceOptional.get(), model.getMember(), true).thenAccept(result ->
|
||||||
log.info("Finished re-assigning experience for update pending user {} in server {}.", model.getUser().getUserId(), model.getServerId())
|
log.info("Finished re-assigning experience for update pending user {} in server {}.", model.getUser().getUserId(), model.getServerId())
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -252,17 +252,17 @@ public class AUserExperienceServiceBean implements AUserExperienceService {
|
|||||||
public CompletableFuture<Void> syncUser(Member member, List<AExperienceRole> roles) {
|
public CompletableFuture<Void> syncUser(Member member, List<AExperienceRole> roles) {
|
||||||
AUserInAServer aUserInAServer = userInServerManagementService.loadOrCreateUser(member);
|
AUserInAServer aUserInAServer = userInServerManagementService.loadOrCreateUser(member);
|
||||||
AUserExperience userExperience = userExperienceManagementService.findByUserInServerId(aUserInAServer.getUserInServerId());
|
AUserExperience userExperience = userExperienceManagementService.findByUserInServerId(aUserInAServer.getUserInServerId());
|
||||||
return calculateAndApplyExperienceRole(userExperience, member, roles);
|
return calculateAndApplyExperienceRole(userExperience, member, roles, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CompletableFuture<Void> syncForSingleUser(AUserExperience userExperience, Member member) {
|
public CompletableFuture<Void> syncForSingleUser(AUserExperience userExperience, Member member, boolean forceRoles) {
|
||||||
List<AExperienceRole> roles = experienceRoleManagementService.getExperienceRolesForServer(userExperience.getServer());
|
List<AExperienceRole> roles = experienceRoleManagementService.getExperienceRolesForServer(userExperience.getServer());
|
||||||
roles.sort(Comparator.comparing(role -> role.getLevel().getLevel()));
|
roles.sort(Comparator.comparing(role -> role.getLevel().getLevel()));
|
||||||
return calculateAndApplyExperienceRole(userExperience, member, roles);
|
return calculateAndApplyExperienceRole(userExperience, member, roles, forceRoles);
|
||||||
}
|
}
|
||||||
|
|
||||||
private CompletableFuture<Void> calculateAndApplyExperienceRole(AUserExperience userExperience, Member member, List<AExperienceRole> roles) {
|
private CompletableFuture<Void> calculateAndApplyExperienceRole(AUserExperience userExperience, Member member, List<AExperienceRole> roles, boolean forceRoles) {
|
||||||
AExperienceRole calculatedNewRole = experienceRoleService.calculateRole(roles, userExperience.getCurrentLevel().getLevel());
|
AExperienceRole calculatedNewRole = experienceRoleService.calculateRole(roles, userExperience.getCurrentLevel().getLevel());
|
||||||
Long oldRoleId = userExperience.getCurrentExperienceRole() != null && userExperience.getCurrentExperienceRole().getRole() != null ? userExperience.getCurrentExperienceRole().getRole().getId() : null;
|
Long oldRoleId = userExperience.getCurrentExperienceRole() != null && userExperience.getCurrentExperienceRole().getRole() != null ? userExperience.getCurrentExperienceRole().getRole().getId() : null;
|
||||||
Long newRoleId = calculatedNewRole != null ? calculatedNewRole.getRole().getId() : null;
|
Long newRoleId = calculatedNewRole != null ? calculatedNewRole.getRole().getId() : null;
|
||||||
@@ -270,15 +270,15 @@ public class AUserExperienceServiceBean implements AUserExperienceService {
|
|||||||
userExperience.setCurrentExperienceRole(calculatedNewRole);
|
userExperience.setCurrentExperienceRole(calculatedNewRole);
|
||||||
|
|
||||||
CompletableFuture<Void> returningFuture;
|
CompletableFuture<Void> returningFuture;
|
||||||
if(!Objects.equals(oldRoleId, newRoleId)) {
|
if(!Objects.equals(oldRoleId, newRoleId) || forceRoles) {
|
||||||
CompletableFuture<Void> addingFuture;
|
CompletableFuture<Void> addingFuture;
|
||||||
if(oldRoleId != null) {
|
if(oldRoleId != null || forceRoles) {
|
||||||
addingFuture = roleService.removeRoleFromMemberAsync(member, oldRoleId);
|
addingFuture = roleService.removeRoleFromMemberAsync(member, oldRoleId);
|
||||||
} else {
|
} else {
|
||||||
addingFuture = CompletableFuture.completedFuture(null);
|
addingFuture = CompletableFuture.completedFuture(null);
|
||||||
}
|
}
|
||||||
CompletableFuture<Void> removingFeature;
|
CompletableFuture<Void> removingFeature;
|
||||||
if(newRoleId != null) {
|
if(newRoleId != null || forceRoles) {
|
||||||
removingFeature = roleService.addRoleToMemberAsync(member, newRoleId);
|
removingFeature = roleService.addRoleToMemberAsync(member, newRoleId);
|
||||||
} else {
|
} else {
|
||||||
removingFeature = CompletableFuture.completedFuture(null);
|
removingFeature = CompletableFuture.completedFuture(null);
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ public class JoiningUserRoleListenerTest {
|
|||||||
public void testUserWithExperienceRejoining() {
|
public void testUserWithExperienceRejoining() {
|
||||||
AUserExperience experience = Mockito.mock(AUserExperience.class);
|
AUserExperience experience = Mockito.mock(AUserExperience.class);
|
||||||
when(userExperienceManagementService.findByUserInServerIdOptional(USER_IN_SERVER_ID)).thenReturn(Optional.of(experience));
|
when(userExperienceManagementService.findByUserInServerIdOptional(USER_IN_SERVER_ID)).thenReturn(Optional.of(experience));
|
||||||
when(userExperienceService.syncForSingleUser(experience, member)).thenReturn(CompletableFuture.completedFuture(null));
|
when(userExperienceService.syncForSingleUser(experience, member, true)).thenReturn(CompletableFuture.completedFuture(null));
|
||||||
when(model.getMember()).thenReturn(member);
|
when(model.getMember()).thenReturn(member);
|
||||||
DefaultListenerResult result = testUnit.execute(model);
|
DefaultListenerResult result = testUnit.execute(model);
|
||||||
Assert.assertEquals(DefaultListenerResult.PROCESSED, result);
|
Assert.assertEquals(DefaultListenerResult.PROCESSED, result);
|
||||||
@@ -78,7 +78,7 @@ public class JoiningUserRoleListenerTest {
|
|||||||
when(model.getMember()).thenReturn(member);
|
when(model.getMember()).thenReturn(member);
|
||||||
when(userExperienceManagementService.findByUserInServerIdOptional(USER_IN_SERVER_ID)).thenReturn(Optional.empty());
|
when(userExperienceManagementService.findByUserInServerIdOptional(USER_IN_SERVER_ID)).thenReturn(Optional.empty());
|
||||||
testUnit.execute(model);
|
testUnit.execute(model);
|
||||||
verify(userExperienceService, times(0)).syncForSingleUser(any(), any());
|
verify(userExperienceService, times(0)).syncForSingleUser(any(), any(), eq(true));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -86,7 +86,7 @@ public class JoiningUserRoleListenerTest {
|
|||||||
when(member.isPending()).thenReturn(true);
|
when(member.isPending()).thenReturn(true);
|
||||||
when(model.getMember()).thenReturn(member);
|
when(model.getMember()).thenReturn(member);
|
||||||
testUnit.execute(model);
|
testUnit.execute(model);
|
||||||
verify(userExperienceService, times(0)).syncForSingleUser(any(), any());
|
verify(userExperienceService, times(0)).syncForSingleUser(any(), any(), any());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ public interface AUserExperienceService {
|
|||||||
|
|
||||||
CompletableFuture<Void> syncUserRolesWithFeedback(AServer server, MessageChannel messageChannel);
|
CompletableFuture<Void> syncUserRolesWithFeedback(AServer server, MessageChannel messageChannel);
|
||||||
|
|
||||||
CompletableFuture<Void> syncForSingleUser(AUserExperience userExperience, Member member);
|
CompletableFuture<Void> syncForSingleUser(AUserExperience userExperience, Member member, boolean changeRoles);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Loads the desired page of the ordered complete leaderboard from the {@link AServer} and returns the information as a {@link LeaderBoard}
|
* Loads the desired page of the ordered complete leaderboard from the {@link AServer} and returns the information as a {@link LeaderBoard}
|
||||||
|
|||||||
@@ -122,10 +122,6 @@ public class RoleServiceBean implements RoleService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private CompletableFuture<Void> addRoleToUserAsync(Guild guild, Long userId, ARole role) {
|
private CompletableFuture<Void> addRoleToUserAsync(Guild guild, Long userId, ARole role) {
|
||||||
if(role.getDeleted()) {
|
|
||||||
log.warn("Not possible to add role to user. Role {} was marked as deleted.", role.getId());
|
|
||||||
throw new RoleDeletedException(role);
|
|
||||||
}
|
|
||||||
Role roleById = guild.getRoleById(role.getId());
|
Role roleById = guild.getRoleById(role.getId());
|
||||||
if(roleById != null) {
|
if(roleById != null) {
|
||||||
log.info("Adding role {} to user {} in server {}.", role.getId(), userId, guild.getId());
|
log.info("Adding role {} to user {} in server {}.", role.getId(), userId, guild.getId());
|
||||||
|
|||||||
Reference in New Issue
Block a user