나의 정보 페이지에서 사용자 정보를 수정하는 기능이 존재한다.
해당 기능을 위해 클라이언트로 부터 이미지 이름 자기소개 정보를 전달받고 해당 유저의 정보를 DB에 갱신한 이후 결과값을 반환한다.
@PatchMapping
public ResponseEntity update(@AuthenticationPrincipal LoginUser loginUser,
@RequestPart(name = "image", required = false) MultipartFile image,
@RequestPart(name = "username", required = false) String username,
@RequestPart(name = "description", required = false) String description) throws IOException {
// image s3 bucket에 저장 후 image url 반환
String imageUrl = s3Service.upload(image).getImageUrl();
// id로 User를 조회한 후 username, description, image url 정보를 갱신
UserInfoRespDto userInfoRespDto = userService.updateUserInfo(loginUser.getUser().getId(), username, description, imageUrl);
return new ResponseEntity<>(new ResponseDto<>(1, "회원정보 수정 성공", userInfoRespDto), OK);
}
image username description을 form-data 형식으로 전달 받는다.image username description 각 정보들의 수정이 불필요한 경우 null 값을 보낼 수 있도록 required 속성을 false로 설정하였다.image를 AWS S3에 저장한 이후 이미지를 조회할 수 있는 URL을 받는다.id로 User를 조회한 이후 사용자의 이름, 자기소개, 이미지 정보를 갱신한다.data에 담아 Response를 반환한다.public UserInfoRespDto updateUserInfo(String id, String username, String description, String image){
// id에 해당하는 User 조회하기
User findUser = userRepository.findById(id)
.orElseThrow(() -> new CustomApiException("id에 해당하는 User를 찾을 수 없습니다."));
// User 정보 갱신
findUser.updateInfo(username, image, description);
// 갱신된 User 정보 데이터 베이스에 저장
User savedUser = userRepository.save(findUser);
return UserInfoRespDto.builder()
.nickname(savedUser.getNickname())
.imageUrl(savedUser.getImage())
.description(savedUser.getDescription())
.build();
}
id에 해당하는 User 값을 Database에서 조회한다.id에 해당하는 User가 존재하지 않는다면 예외처리(CustomApiException)를 진행한다.updaeInfo() 메소드를 통해 User 필드의 값을 갱신한다.User를 Database에 저장한다.image username description의 값이 null 혹은 필드 자체를 지우고 테스트를 진행한 결과 코드가 정상적으로 수행되는 것을 확인할 수 있었다.