package github.benjamin.equipreservebackend.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import github.benjamin.equipreservebackend.dto.LoginRequest; import github.benjamin.equipreservebackend.dto.UserDTO; import github.benjamin.equipreservebackend.entity.Role; 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.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import java.util.List; @RestController @RequiredArgsConstructor public class UserController { private final UserService userService; private final JwtUtil jwtUtil; @PostMapping("/login") public ResponseResult login(@RequestBody LoginRequest request) { User user = userService.login(request.getUsername(), request.getPassword()); SecurityUser securityUser = userService.loadSecurityUserById(user.getId()); String token = jwtUtil.generateToken(securityUser); 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)); } @PutMapping("/user/{id}") public ResponseResult updateUser(@PathVariable Long id, @RequestBody UserDTO dto) { userService.updateUser(id, dto); return ResponseResult.success(userService.getUserVO(id)); } @PreAuthorize("hasRole('ADMIN')") @PostMapping("/user") public ResponseResult addUser(@RequestBody UserDTO dto) { userService.addUser(dto); return ResponseResult.success(); } @PreAuthorize("hasRole('ADMIN')") @GetMapping("/user") public ResponseResult> getUserVOs(@RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "10") Integer size, @RequestParam(required = false) String name) { Page pageRequest = new Page<>(page, size); return ResponseResult.success(userService.getUserVOs(pageRequest, name)); } @PreAuthorize("hasRole('ADMIN')") @DeleteMapping("/user/{userId}") public ResponseResult deleteUser(@PathVariable("userId") Long userId) { userService.deleteById(userId); return ResponseResult.success(); } }