diff --git a/src/main/java/com/example/catchTheLetters/constant/HttpStatus.java b/src/main/java/com/example/catchTheLetters/constant/HttpStatus.java index ee7794a..85c0033 100644 --- a/src/main/java/com/example/catchTheLetters/constant/HttpStatus.java +++ b/src/main/java/com/example/catchTheLetters/constant/HttpStatus.java @@ -19,6 +19,8 @@ public enum HttpStatus { TOKEN_EXCEPTION(401, "token验证错误"), + USERNAME_CONFLICT(409, "用户名已存在"), + ERROR(500, "系统内部错误"); private final Integer code; diff --git a/src/main/java/com/example/catchTheLetters/controller/AuthController.java b/src/main/java/com/example/catchTheLetters/controller/AuthController.java index b3b4345..261835d 100644 --- a/src/main/java/com/example/catchTheLetters/controller/AuthController.java +++ b/src/main/java/com/example/catchTheLetters/controller/AuthController.java @@ -41,8 +41,8 @@ public class AuthController { @ApiOperation(value = "验证token(不会返回密码)") @GetMapping("/verify") - public R verify(@RequestHeader("token") String token) { - return R.ok(authService.verify(token)); + public R verify(@RequestHeader("token") String token) { + return R.ok(authService.verify(token).toVo()); } @ApiOperation(value = "用户注册") @@ -62,8 +62,8 @@ public class AuthController { } @ApiOperation(value = "用户信息修改") - @PostMapping("/update") - public R update(@RequestBody User user) { - return null; + @PutMapping("/update") + public R update(@RequestBody User user, @RequestHeader("token") String token) { + return authService.update(user, token); } } diff --git a/src/main/java/com/example/catchTheLetters/service/AuthService.java b/src/main/java/com/example/catchTheLetters/service/AuthService.java index c250b52..74febeb 100644 --- a/src/main/java/com/example/catchTheLetters/service/AuthService.java +++ b/src/main/java/com/example/catchTheLetters/service/AuthService.java @@ -60,5 +60,12 @@ public interface AuthService { */ User getUserByName(String username); - + /** + * 用户信息修改 + * + * @param user 用户信息 + * @param token token + * @return 新的用户信息 + */ + R update(User user, String token); } diff --git a/src/main/java/com/example/catchTheLetters/service/impl/AuthServiceImpl.java b/src/main/java/com/example/catchTheLetters/service/impl/AuthServiceImpl.java index 08cd0e6..5e173e7 100644 --- a/src/main/java/com/example/catchTheLetters/service/impl/AuthServiceImpl.java +++ b/src/main/java/com/example/catchTheLetters/service/impl/AuthServiceImpl.java @@ -1,6 +1,7 @@ package com.example.catchTheLetters.service.impl; import com.example.catchTheLetters.constant.CommonConstant; +import com.example.catchTheLetters.constant.HttpStatus; import com.example.catchTheLetters.model.dto.LoginDto; import com.example.catchTheLetters.model.dto.RegisterDto; import com.example.catchTheLetters.entity.User; @@ -56,9 +57,9 @@ public class AuthServiceImpl implements AuthService { return R.fail("密码错误"); } Map map = new HashMap<>(); - map.put("id", user.getId().toString()); + map.put("id", user.getId()); var token = JwtUtil.getToken(map, CommonConstant.TOKEN_EXPIRE_TIME); - redisService.hSet(token, user.getId().toString(), CommonConstant.REDIS_EXPIRE_TIME); + redisService.hSet(token, user.getId(), CommonConstant.REDIS_EXPIRE_TIME); return R.ok(token); } @@ -87,11 +88,13 @@ public class AuthServiceImpl implements AuthService { // 用户名重复 if (regedUser != null) { - R.fail("用户名重复"); + R.fail(HttpStatus.USERNAME_CONFLICT.getCode(), HttpStatus.USERNAME_CONFLICT.getDesc()); } var user = new User(); user.setUsername(registerDto.getUsername()); user.setPassword(registerDto.getPassword()); + user.setCreateTime(System.currentTimeMillis()); + user.setUpdateTime(System.currentTimeMillis()); var insert = mongoTemplate.insert(user); if (insert.getId() != null) { return R.ok(user.toVo()); @@ -109,4 +112,37 @@ public class AuthServiceImpl implements AuthService { public User getUserByName(String username) { return mongoTemplate.findOne(new Query(Criteria.where("username").is(username).and(CommonConstant.STATUS).ne(0)), User.class); } + + @Override + public R update(User user, String token) { + // 先获取当前账户,比对id是否一致,然后再插入 + var verify = verify(token); + if (verify == null || !verify.getId().equals(user.getId())) { + return R.fail(HttpStatus.TOKEN_EXCEPTION.getCode(), HttpStatus.TOKEN_EXCEPTION.getDesc()); + } + + // 如果用户名修改了,检查是否有重复,有重复则返回null,否则修改 + if (!verify.getUsername().equals(user.getUsername())) { + var regedUser = getUserByName(user.getUsername()); + if (regedUser != null) { + return R.fail(HttpStatus.USERNAME_CONFLICT.getCode(), HttpStatus.USERNAME_CONFLICT.getDesc()); + } + + verify.setUsername(user.getUsername()); + } + + // 如果密码为空,意味着没修改密码,否则修改密码 + if (user.getPassword() != null && !user.getPassword().isEmpty()) { + verify.setPassword(user.getPassword()); + } + + verify.setAvatar(user.getAvatar()); + verify.setEmail(user.getEmail()); + verify.setPhone(user.getPhone()); + verify.setSex(user.getSex()); + verify.setIntroduction(user.getIntroduction()); + verify.setUpdateTime(System.currentTimeMillis()); + + return R.ok(mongoTemplate.save(verify).toVo()); + } }