From 3f132ba3cc2dc70b7f5da1410e9a6be18fec319e Mon Sep 17 00:00:00 2001 From: bjkim Date: Mon, 22 Sep 2025 10:11:45 +0900 Subject: [PATCH] =?UTF-8?q?[ADD]=20=EC=82=AC=EC=9A=A9=EC=9E=90=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20=EB=B0=8F=20=EC=82=AD=EC=A0=9C=20API=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80,=20=EA=B6=8C=ED=95=9C=20=ED=83=9C=EA=B7=B8=20?= =?UTF-8?q?=EC=9D=B4=EB=A6=84=20=EC=88=98=EC=A0=95=20(AuthController)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../autoflow/controllers/AuthController.java | 69 ++++++++++++++++++- 1 file changed, 68 insertions(+), 1 deletion(-) diff --git a/src/main/java/kr/re/etri/autoflow/controllers/AuthController.java b/src/main/java/kr/re/etri/autoflow/controllers/AuthController.java index d4d9433..e0a9f34 100644 --- a/src/main/java/kr/re/etri/autoflow/controllers/AuthController.java +++ b/src/main/java/kr/re/etri/autoflow/controllers/AuthController.java @@ -38,7 +38,7 @@ import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; -@Tag(name = "권한", description = "유저 권한 API") +@Tag(name = "유저 권한", description = "유저 권한 API") @CrossOrigin(origins = "*", maxAge = 3600) @RestController @RequestMapping("/api/auth") @@ -205,4 +205,71 @@ public class AuthController { return ResponseEntity.ok(users); } + + @Operation(summary = "사용자 수정", description = "사용자 정보를 수정합니다.") + @ApiResponses({ + @ApiResponse(responseCode = "200", description = "사용자 수정 성공"), + @ApiResponse(responseCode = "404", description = "해당 ID의 사용자를 찾을 수 없음") + }) + @PutMapping("/users/{id}") + public ResponseEntity updateUser( + @Parameter(description = "사용자 ID", example = "1") @PathVariable Long id, + @Valid @RequestBody SignupRequest updateRequest) { + + return userRepository.findById(id).map(user -> { + if (!user.getUsername().equals(updateRequest.getUsername()) + && userRepository.existsByUsername(updateRequest.getUsername())) { + return ResponseEntity.badRequest() + .body(new MessageResponse(false, "오류: 이미 사용 중인 사용자 이름입니다.")); + } + + if (!user.getEmail().equals(updateRequest.getEmail()) + && userRepository.existsByEmail(updateRequest.getEmail())) { + return ResponseEntity.badRequest() + .body(new MessageResponse(false, "오류: 이미 사용 중인 이메일입니다.")); + } + + user.setUsername(updateRequest.getUsername()); + user.setEmail(updateRequest.getEmail()); + if (updateRequest.getPassword() != null && !updateRequest.getPassword().isEmpty()) { + user.setPassword(encoder.encode(updateRequest.getPassword())); + } + + // 역할 수정 + Set strRoles = updateRequest.getRole(); + Set roles = new HashSet<>(); + if (strRoles != null) { + for (String roleName : strRoles) { + try { + ERole eRole = ERole.valueOf(roleName); + Role role = roleRepository.findByName(eRole) + .orElseThrow(() -> new RuntimeException("오류: '" + roleName + "' 역할이 DB에 존재하지 않습니다.")); + roles.add(role); + } catch (IllegalArgumentException e) { + return ResponseEntity.badRequest().body(new MessageResponse(false,"오류: '" + roleName + "' 역할은 유효하지 않습니다.")); + } + } + user.setRoles(roles); + } + + userRepository.save(user); + return ResponseEntity.ok(new MessageResponse(true,"사용자 정보가 수정되었습니다.")); + }).orElse(ResponseEntity.notFound().build()); + } + + @Operation(summary = "사용자 삭제", description = "사용자 ID로 사용자를 삭제합니다.") + @ApiResponses({ + @ApiResponse(responseCode = "200", description = "사용자 삭제 성공"), + @ApiResponse(responseCode = "404", description = "해당 ID의 사용자를 찾을 수 없음") + }) + @DeleteMapping("/users/{id}") + public ResponseEntity deleteUser( + @Parameter(description = "사용자 ID", example = "1") @PathVariable Long id) { + + return userRepository.findById(id).map(user -> { + refreshTokenService.deleteByUserId(user.getId()); // 토큰 삭제 + userRepository.delete(user); + return ResponseEntity.ok(new MessageResponse(true, "사용자가 삭제되었습니다.")); + }).orElse(ResponseEntity.notFound().build()); + } }