|
|
|
|
@ -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<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());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|