Skip to content

Commit ae3051b

Browse files
committed
fix(UserService): 修复更新用户信息异常的问题
更新用户信息时使用 BeanCopy 复制 DTO,DTO 中的 null 字段也被 复制到当前已登录用户信息中,导致信息缺失
1 parent 7e082fb commit ae3051b

File tree

2 files changed

+27
-13
lines changed

2 files changed

+27
-13
lines changed

src/main/java/io/github/talelin/latticy/service/impl/UserServiceImpl.java

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,10 +101,27 @@ public UserDO updateUserInfo(UpdateInfoDTO dto) {
101101
if (exist) {
102102
throw new ForbiddenException(10071);
103103
}
104+
105+
boolean changeSuccess = userIdentityService.changeUsername(user.getId(), dto.getUsername());
106+
if (changeSuccess) {
107+
user.setUsername(dto.getUsername());
108+
}
109+
}
110+
111+
// todo 增加工具类实现忽略 null 的 BeanCopy,简化这段代码
112+
if (dto.getUsername() != null) {
104113
user.setUsername(dto.getUsername());
105-
userIdentityService.changeUsername(user.getId(), dto.getUsername());
106114
}
107-
BeanUtils.copyProperties(dto, user);
115+
if (dto.getAvatar() != null) {
116+
user.setAvatar(dto.getAvatar());
117+
}
118+
if (dto.getEmail() != null) {
119+
user.setEmail(dto.getEmail());
120+
}
121+
if (dto.getNickname() != null) {
122+
user.setNickname(dto.getNickname());
123+
}
124+
108125
this.baseMapper.updateById(user);
109126
return user;
110127
}

src/test/java/io/github/talelin/latticy/service/impl/UserServiceImplTest.java

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -134,16 +134,13 @@ public void updateUserInfoNoUsername() {
134134

135135
@Test
136136
public void changeUserPassword() {
137-
// TODO 待解决 单独执行不会抛出空指针异常,批量执行则会抛出空指针异常。
138-
assertThrows(NullPointerException.class, () -> {
139-
ChangePasswordDTO dto = new ChangePasswordDTO();
140-
dto.setNewPassword("147258");
141-
dto.setConfirmPassword("147258");
142-
dto.setOldPassword("123456");
143-
UserDO user = userService.changeUserPassword(dto);
144-
boolean b = userIdentityService.verifyUsernamePassword(user.getId(), "pedro", "147258");
145-
assertTrue(b);
146-
});
137+
ChangePasswordDTO dto = new ChangePasswordDTO();
138+
dto.setNewPassword("147258");
139+
dto.setConfirmPassword("147258");
140+
dto.setOldPassword("123456");
141+
UserDO user = userService.changeUserPassword(dto);
142+
boolean b = userIdentityService.verifyUsernamePassword(user.getId(), "pedro", "147258");
143+
assertTrue(b);
147144
}
148145

149146
@Test
@@ -204,4 +201,4 @@ public void checkCreateAndDeleteUser() {
204201
UserDO newUser = userService.createUser(dto);
205202
assertEquals(newUser.getUsername(), "pedro111");
206203
}
207-
}
204+
}

0 commit comments

Comments
 (0)