[프로젝트] 사용자 정보 수정 기능

김상현·2023년 10월 11일
post-thumbnail

✏️ Description

📱 사용자 정보 수정 화면

나의 정보 페이지에서 사용자 정보를 수정하는 기능이 존재한다.
해당 기능을 위해 클라이언트로 부터 이미지 이름 자기소개 정보를 전달받고 해당 유저의 정보를 DB에 갱신한 이후 결과값을 반환한다.

🧑‍💻 코드

UserController

@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 descriptionform-data 형식으로 전달 받는다.
    • 만약 image username description 각 정보들의 수정이 불필요한 경우 null 값을 보낼 수 있도록 required 속성을 false로 설정하였다.
  • 첫 번째로 클라이언트로 부터 전달 받은 image를 AWS S3에 저장한 이후 이미지를 조회할 수 있는 URL을 받는다.
  • 두 번재로 idUser를 조회한 이후 사용자의 이름, 자기소개, 이미지 정보를 갱신한다.
  • 마지막으로 갱신된 정보를 data에 담아 Response를 반환한다.

UserService

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에 저장한다.
  • 저장된 결과값을 DTO에 담아 결과값을 반환한다.

🔥 결과

  • image username description의 값이 null 혹은 필드 자체를 지우고 테스트를 진행한 결과 코드가 정상적으로 수행되는 것을 확인할 수 있었다.
profile
목적 있는 글쓰기

0개의 댓글