[ADD] 사용자 수정 및 삭제 API 추가, 권한 태그 이름 수정 (AuthController)

main
bjkim 9 months ago
parent f3865f74ea
commit 3f132ba3cc

@ -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.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.responses.ApiResponses;
@Tag(name = "권한", description = "유저 권한 API") @Tag(name = "유저 권한", description = "유저 권한 API")
@CrossOrigin(origins = "*", maxAge = 3600) @CrossOrigin(origins = "*", maxAge = 3600)
@RestController @RestController
@RequestMapping("/api/auth") @RequestMapping("/api/auth")
@ -205,4 +205,71 @@ public class AuthController {
return ResponseEntity.ok(users); 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<String> strRoles = updateRequest.getRole();
Set<Role> 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<MessageResponse> 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());
}
} }

Loading…
Cancel
Save