diff --git a/src/main/java/github/benjamin/equipreservebackend/controller/UserController.java b/src/main/java/github/benjamin/equipreservebackend/controller/UserController.java index 97b1ef2..daf3f96 100644 --- a/src/main/java/github/benjamin/equipreservebackend/controller/UserController.java +++ b/src/main/java/github/benjamin/equipreservebackend/controller/UserController.java @@ -1,17 +1,17 @@ package github.benjamin.equipreservebackend.controller; import github.benjamin.equipreservebackend.dto.LoginRequest; +import github.benjamin.equipreservebackend.dto.UserDTO; import github.benjamin.equipreservebackend.entity.Role; -import github.benjamin.equipreservebackend.vo.LoginResponse; -import github.benjamin.equipreservebackend.response.ResponseResult; import github.benjamin.equipreservebackend.entity.User; +import github.benjamin.equipreservebackend.response.ResponseResult; import github.benjamin.equipreservebackend.security.SecurityUser; import github.benjamin.equipreservebackend.service.UserService; import github.benjamin.equipreservebackend.utils.JwtUtil; +import github.benjamin.equipreservebackend.vo.LoginResponse; +import github.benjamin.equipreservebackend.vo.UserVO; import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.List; @@ -31,4 +31,17 @@ public class UserController { List roles = securityUser.getRoles().stream().map(Role::getCode).toList(); return ResponseResult.success(new LoginResponse(user.getId(), user.getName(), roles, token)); } + + @GetMapping("/userdetail/{id}") + public ResponseResult getUserVO(@PathVariable Long id) { + return ResponseResult.success(userService.getUserVO(id)); + } + + @PatchMapping("/user/{id}") + public ResponseResult updateUser(@PathVariable Long id, + @RequestBody UserDTO dto) { + userService.updateUser(id, dto); + return ResponseResult.success(userService.getUserVO(id)); + } + } diff --git a/src/main/java/github/benjamin/equipreservebackend/dto/UserDTO.java b/src/main/java/github/benjamin/equipreservebackend/dto/UserDTO.java new file mode 100644 index 0000000..29f0c21 --- /dev/null +++ b/src/main/java/github/benjamin/equipreservebackend/dto/UserDTO.java @@ -0,0 +1,12 @@ +package github.benjamin.equipreservebackend.dto; + +import lombok.Data; + +@Data +public class UserDTO { + + private String name; + private String phone; + private String password; + +} diff --git a/src/main/java/github/benjamin/equipreservebackend/service/UserService.java b/src/main/java/github/benjamin/equipreservebackend/service/UserService.java index ca9dd3f..50ff9c2 100644 --- a/src/main/java/github/benjamin/equipreservebackend/service/UserService.java +++ b/src/main/java/github/benjamin/equipreservebackend/service/UserService.java @@ -1,11 +1,17 @@ package github.benjamin.equipreservebackend.service; +import github.benjamin.equipreservebackend.dto.UserDTO; import github.benjamin.equipreservebackend.entity.User; import github.benjamin.equipreservebackend.security.SecurityUser; +import github.benjamin.equipreservebackend.vo.UserVO; public interface UserService { User login(String username, String password); SecurityUser loadSecurityUserById(Long userId); + + UserVO getUserVO(Long id); + + void updateUser(Long id, UserDTO dto); } diff --git a/src/main/java/github/benjamin/equipreservebackend/service/impl/UserServiceImpl.java b/src/main/java/github/benjamin/equipreservebackend/service/impl/UserServiceImpl.java index c56ff95..3452711 100644 --- a/src/main/java/github/benjamin/equipreservebackend/service/impl/UserServiceImpl.java +++ b/src/main/java/github/benjamin/equipreservebackend/service/impl/UserServiceImpl.java @@ -1,18 +1,24 @@ package github.benjamin.equipreservebackend.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import github.benjamin.equipreservebackend.dto.UserDTO; import github.benjamin.equipreservebackend.entity.Role; +import github.benjamin.equipreservebackend.entity.Team; import github.benjamin.equipreservebackend.entity.User; import github.benjamin.equipreservebackend.exception.ApiException; import github.benjamin.equipreservebackend.mapper.RoleMapper; +import github.benjamin.equipreservebackend.mapper.TeamMapper; import github.benjamin.equipreservebackend.mapper.UserMapper; import github.benjamin.equipreservebackend.response.ResponseCode; import github.benjamin.equipreservebackend.security.SecurityUser; import github.benjamin.equipreservebackend.service.UserService; import github.benjamin.equipreservebackend.utils.JwtUtil; import github.benjamin.equipreservebackend.utils.PasswordUtil; +import github.benjamin.equipreservebackend.vo.UserVO; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; import java.util.List; import java.util.Objects; @@ -25,6 +31,8 @@ public class UserServiceImpl implements UserService { private final RoleMapper roleMapper; + private final TeamMapper teamMapper; + private final JwtUtil jwtUtil; @Override @@ -45,4 +53,24 @@ public class UserServiceImpl implements UserService { List roles = roleMapper.selectRoleByUserId(userId); return new SecurityUser(user, roles); } + + @Override + public UserVO getUserVO(Long id) { + User user = userMapper.selectById(id); + Team team = teamMapper.selectById(user.getTeamId()); + return new UserVO(user, team); + } + + @Override + public void updateUser(Long id, UserDTO dto) { + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper() + .eq(User::getId, id) + .set(StringUtils.hasText(dto.getName()), User::getName, dto.getName()) + .set(StringUtils.hasText(dto.getPhone()), User::getPhone, dto.getPhone()); + if (StringUtils.hasText(dto.getPassword())) { + String encoded = PasswordUtil.encode(dto.getPassword()); + wrapper.set(User::getPassword, encoded); + } + userMapper.update(wrapper); + } } diff --git a/src/main/java/github/benjamin/equipreservebackend/vo/UserVO.java b/src/main/java/github/benjamin/equipreservebackend/vo/UserVO.java new file mode 100644 index 0000000..dbaca32 --- /dev/null +++ b/src/main/java/github/benjamin/equipreservebackend/vo/UserVO.java @@ -0,0 +1,25 @@ +package github.benjamin.equipreservebackend.vo; + +import github.benjamin.equipreservebackend.entity.Team; +import github.benjamin.equipreservebackend.entity.User; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class UserVO { + + private String username; + private String team; + private String name; + private String phone; + + public UserVO(User u, Team t) { + this.username = u.getUsername(); + this.name = u.getName(); + this.phone = u.getPhone(); + this.team = t.getName(); + } +}