diff --git a/src/main/java/com/example/solidconnection/siteuser/controller/MyPageController.java b/src/main/java/com/example/solidconnection/siteuser/controller/MyPageController.java index 94bc6e8a8..41862bf8b 100644 --- a/src/main/java/com/example/solidconnection/siteuser/controller/MyPageController.java +++ b/src/main/java/com/example/solidconnection/siteuser/controller/MyPageController.java @@ -31,8 +31,8 @@ public ResponseEntity getMyPageInfo( @PatchMapping public ResponseEntity updateMyPageInfo( @AuthorizedUser SiteUser siteUser, - @RequestParam("file") MultipartFile imageFile, - @RequestParam("nickname") String nickname + @RequestParam(value = "file", required = false) MultipartFile imageFile, + @RequestParam(value = "nickname", required = false) String nickname ) { myPageService.updateMyPageInfo(siteUser, imageFile, nickname); return ResponseEntity.ok().build(); diff --git a/src/main/java/com/example/solidconnection/siteuser/service/MyPageService.java b/src/main/java/com/example/solidconnection/siteuser/service/MyPageService.java index 50a020427..e89c6cdfa 100644 --- a/src/main/java/com/example/solidconnection/siteuser/service/MyPageService.java +++ b/src/main/java/com/example/solidconnection/siteuser/service/MyPageService.java @@ -21,7 +21,6 @@ import static com.example.solidconnection.custom.exception.ErrorCode.CAN_NOT_CHANGE_NICKNAME_YET; import static com.example.solidconnection.custom.exception.ErrorCode.NICKNAME_ALREADY_EXISTED; -import static com.example.solidconnection.custom.exception.ErrorCode.PROFILE_IMAGE_NEEDED; @RequiredArgsConstructor @Service @@ -48,19 +47,21 @@ public MyPageResponse getMyPageInfo(SiteUser siteUser) { * */ @Transactional public void updateMyPageInfo(SiteUser siteUser, MultipartFile imageFile, String nickname) { - validateNicknameUnique(nickname); - validateNicknameNotChangedRecently(siteUser.getNicknameModifiedAt()); - validateProfileImageNotEmpty(imageFile); - - if (!isDefaultProfileImage(siteUser.getProfileImageUrl())) { - s3Service.deleteExProfile(siteUser); + if (nickname != null) { + validateNicknameUnique(nickname); + validateNicknameNotChangedRecently(siteUser.getNicknameModifiedAt()); + siteUser.setNickname(nickname); + siteUser.setNicknameModifiedAt(LocalDateTime.now()); } - UploadedFileUrlResponse uploadedFile = s3Service.uploadFile(imageFile, ImgType.PROFILE); - String profileImageUrl = uploadedFile.fileUrl(); - siteUser.setProfileImageUrl(profileImageUrl); - siteUser.setNickname(nickname); - siteUser.setNicknameModifiedAt(LocalDateTime.now()); + if (imageFile != null && !imageFile.isEmpty()) { + UploadedFileUrlResponse uploadedFile = s3Service.uploadFile(imageFile, ImgType.PROFILE); + if (!isDefaultProfileImage(siteUser.getProfileImageUrl())) { + s3Service.deleteExProfile(siteUser); + } + String profileImageUrl = uploadedFile.fileUrl(); + siteUser.setProfileImageUrl(profileImageUrl); + } siteUserRepository.save(siteUser); } @@ -81,12 +82,6 @@ private void validateNicknameNotChangedRecently(LocalDateTime lastModifiedAt) { } } - private void validateProfileImageNotEmpty(MultipartFile imageFile) { - if (imageFile == null || imageFile.isEmpty()) { - throw new CustomException(PROFILE_IMAGE_NEEDED); - } - } - private boolean isDefaultProfileImage(String profileImageUrl) { String prefix = "profile/"; return profileImageUrl == null || !profileImageUrl.startsWith(prefix); diff --git a/src/test/java/com/example/solidconnection/siteuser/service/MyPageServiceTest.java b/src/test/java/com/example/solidconnection/siteuser/service/MyPageServiceTest.java index 6e897f04a..334b6f740 100644 --- a/src/test/java/com/example/solidconnection/siteuser/service/MyPageServiceTest.java +++ b/src/test/java/com/example/solidconnection/siteuser/service/MyPageServiceTest.java @@ -29,7 +29,6 @@ import static com.example.solidconnection.custom.exception.ErrorCode.CAN_NOT_CHANGE_NICKNAME_YET; import static com.example.solidconnection.custom.exception.ErrorCode.NICKNAME_ALREADY_EXISTED; -import static com.example.solidconnection.custom.exception.ErrorCode.PROFILE_IMAGE_NEEDED; import static com.example.solidconnection.siteuser.service.MyPageService.MIN_DAYS_BETWEEN_NICKNAME_CHANGES; import static com.example.solidconnection.siteuser.service.MyPageService.NICKNAME_LAST_CHANGE_DATE_FORMAT; import static org.assertj.core.api.Assertions.assertThat; @@ -144,18 +143,6 @@ class 프로필_이미지_수정_테스트 { // then then(s3Service).should().deleteExProfile(testUser); } - - @Test - void 빈_이미지_파일로_프로필을_수정하면_예외_응답을_반환한다() { - // given - SiteUser testUser = createSiteUser(); - MockMultipartFile emptyFile = createEmptyImageFile(); - - // when & then - assertThatCode(() -> myPageService.updateMyPageInfo(testUser, emptyFile, "newNickname")) - .isInstanceOf(CustomException.class) - .hasMessage(PROFILE_IMAGE_NEEDED.getMessage()); - } } @Nested @@ -273,15 +260,6 @@ private MockMultipartFile createValidImageFile() { ); } - private MockMultipartFile createEmptyImageFile() { - return new MockMultipartFile( - "image", - "empty.jpg", - "image/jpeg", - new byte[0] - ); - } - private String createExpectedErrorMessage(LocalDateTime modifiedAt) { String formatLastModifiedAt = String.format( "(마지막 수정 시간 : %s)",