Skip to content

Commit

Permalink
Lsh/fix team cache issue (#128)
Browse files Browse the repository at this point in the history
* Add admin check before checking team-user relation

* As user queried from DB may point to another object, remove may fail. Instead of remove, use removeIf method.

* Delete team/team relation cache data properly when delete a team.
Change order of data operation, make DB operation ahead of cache operation.

* NPE check for object queried by dirty data in initList method

Co-authored-by: Le Zhou <2428499107@qq.com>
  • Loading branch information
olivershen-wow and zhou9584 committed Nov 9, 2022
1 parent 5797740 commit 0204320
Show file tree
Hide file tree
Showing 5 changed files with 24 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ public Result deleteTeam(@CurrentSecurityContext SysUser requestor, @RequestPara
return Result.error(HttpStatus.FORBIDDEN.value(), "There are still users under this team, operation is forbidden.");
}

sysTeamService.deleteTeam(sysTeam);
userTeamManagementService.deleteTeam(sysTeam);
return Result.ok("Delete team success!");
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,4 @@ public interface UserTeamRelationRepository extends JpaRepository<UserTeamRelati
List<UserTeamRelation> findAllByMailAddressAndIsTeamAdmin(String mailAddress, boolean isTeamAdmin);
List<UserTeamRelation> findAllByMailAddress(String mailAddress);
List<UserTeamRelation> findAllByTeamId(String teamId);
void deleteAllByTeamId(String roleId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,10 @@ public void initList() {
List<RolePermissionRelation> relationList = rolePermissionRelationRepository.findAll();
relationList.forEach(relation -> {
Set<SysPermission> permissionList = rolePermissionListMap.computeIfAbsent(relation.getRoleId(), k -> new HashSet<>());
permissionList.add(sysPermissionService.queryPermissionById(relation.getPermissionId()));
SysPermission permission = sysPermissionService.queryPermissionById(relation.getPermissionId());
if (permission != null) {
permissionList.add(permission);
}
});
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,10 +58,12 @@ public SysTeam updateTeam(SysTeam sysTeam) {
}

sysTeam.setUpdateTime(new Date());
teamListMap.put(sysTeam.getTeamId(), sysTeam);
updateTeamRelatedEntity(sysTeam.getTeamId(), sysTeam.getTeamName());
SysTeam team = sysTeamRepository.save(sysTeam);

return sysTeamRepository.save(sysTeam);
teamListMap.put(sysTeam.getTeamId(), sysTeam);

return team;
}

/**
Expand Down Expand Up @@ -128,9 +130,8 @@ public List<SysTeam> queryTeams() {
}

public void deleteTeam(SysTeam team) {
teamListMap.remove(team.getTeamId());
sysTeamRepository.deleteById(team.getTeamId());
userTeamRelationRepository.deleteAllByTeamId(team.getTeamId());
teamListMap.remove(team.getTeamId());
}

public SysTeam getOrCreateDefaultTeam(String defaultTeamName) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,15 @@ public void initList() {
List<UserTeamRelation> relationList = userTeamRelationRepository.findAll();
relationList.forEach(relation -> {
Set<SysTeam> teamList = userTeamListMap.computeIfAbsent(relation.getMailAddress(), k -> new HashSet<>());
teamList.add(sysTeamService.queryTeamById(relation.getTeamId()));
SysTeam team = sysTeamService.queryTeamById(relation.getTeamId());
if (team != null) {
teamList.add(team);
}
Set<SysUser> userList = teamUserListMap.computeIfAbsent(relation.getTeamId(), k -> new HashSet<>());
userList.add(sysUserService.queryUserByMailAddress(relation.getMailAddress()));
SysUser user = sysUserService.queryUserByMailAddress(relation.getMailAddress());
if (user != null) {
userList.add(user);
}
if (relation.isTeamAdmin()) {
Set<String> teamAdmins = teamAdminListMap.computeIfAbsent(relation.getTeamId(), k -> new HashSet<>());
teamAdmins.add(relation.getMailAddress());
Expand Down Expand Up @@ -193,4 +199,10 @@ public List<CriteriaType> formTeamIdCriteria(Map<String, Boolean> teamAdminMap)

return criteriaTypes;
}

public void deleteTeam(SysTeam team) {
List<UserTeamRelation> relations = userTeamRelationRepository.findAllByTeamId(team.getTeamId());
relations.forEach(this::deleteUserTeamRelation);
sysTeamService.deleteTeam(team);
}
}

0 comments on commit 0204320

Please sign in to comment.