Skip to content

Commit a2495ea

Browse files
authored
fix: 프로필 수정 API에서 닉네임, 이미지 부분 업데이트 가능하도록 수정 (#268)
1 parent 6dfc6ed commit a2495ea

3 files changed

Lines changed: 15 additions & 42 deletions

File tree

src/main/java/com/example/solidconnection/siteuser/controller/MyPageController.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ public ResponseEntity<MyPageResponse> getMyPageInfo(
3131
@PatchMapping
3232
public ResponseEntity<Void> updateMyPageInfo(
3333
@AuthorizedUser SiteUser siteUser,
34-
@RequestParam("file") MultipartFile imageFile,
35-
@RequestParam("nickname") String nickname
34+
@RequestParam(value = "file", required = false) MultipartFile imageFile,
35+
@RequestParam(value = "nickname", required = false) String nickname
3636
) {
3737
myPageService.updateMyPageInfo(siteUser, imageFile, nickname);
3838
return ResponseEntity.ok().build();

src/main/java/com/example/solidconnection/siteuser/service/MyPageService.java

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121

2222
import static com.example.solidconnection.custom.exception.ErrorCode.CAN_NOT_CHANGE_NICKNAME_YET;
2323
import static com.example.solidconnection.custom.exception.ErrorCode.NICKNAME_ALREADY_EXISTED;
24-
import static com.example.solidconnection.custom.exception.ErrorCode.PROFILE_IMAGE_NEEDED;
2524

2625
@RequiredArgsConstructor
2726
@Service
@@ -48,19 +47,21 @@ public MyPageResponse getMyPageInfo(SiteUser siteUser) {
4847
* */
4948
@Transactional
5049
public void updateMyPageInfo(SiteUser siteUser, MultipartFile imageFile, String nickname) {
51-
validateNicknameUnique(nickname);
52-
validateNicknameNotChangedRecently(siteUser.getNicknameModifiedAt());
53-
validateProfileImageNotEmpty(imageFile);
54-
55-
if (!isDefaultProfileImage(siteUser.getProfileImageUrl())) {
56-
s3Service.deleteExProfile(siteUser);
50+
if (nickname != null) {
51+
validateNicknameUnique(nickname);
52+
validateNicknameNotChangedRecently(siteUser.getNicknameModifiedAt());
53+
siteUser.setNickname(nickname);
54+
siteUser.setNicknameModifiedAt(LocalDateTime.now());
5755
}
58-
UploadedFileUrlResponse uploadedFile = s3Service.uploadFile(imageFile, ImgType.PROFILE);
59-
String profileImageUrl = uploadedFile.fileUrl();
6056

61-
siteUser.setProfileImageUrl(profileImageUrl);
62-
siteUser.setNickname(nickname);
63-
siteUser.setNicknameModifiedAt(LocalDateTime.now());
57+
if (imageFile != null && !imageFile.isEmpty()) {
58+
UploadedFileUrlResponse uploadedFile = s3Service.uploadFile(imageFile, ImgType.PROFILE);
59+
if (!isDefaultProfileImage(siteUser.getProfileImageUrl())) {
60+
s3Service.deleteExProfile(siteUser);
61+
}
62+
String profileImageUrl = uploadedFile.fileUrl();
63+
siteUser.setProfileImageUrl(profileImageUrl);
64+
}
6465
siteUserRepository.save(siteUser);
6566
}
6667

@@ -81,12 +82,6 @@ private void validateNicknameNotChangedRecently(LocalDateTime lastModifiedAt) {
8182
}
8283
}
8384

84-
private void validateProfileImageNotEmpty(MultipartFile imageFile) {
85-
if (imageFile == null || imageFile.isEmpty()) {
86-
throw new CustomException(PROFILE_IMAGE_NEEDED);
87-
}
88-
}
89-
9085
private boolean isDefaultProfileImage(String profileImageUrl) {
9186
String prefix = "profile/";
9287
return profileImageUrl == null || !profileImageUrl.startsWith(prefix);

src/test/java/com/example/solidconnection/siteuser/service/MyPageServiceTest.java

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929

3030
import static com.example.solidconnection.custom.exception.ErrorCode.CAN_NOT_CHANGE_NICKNAME_YET;
3131
import static com.example.solidconnection.custom.exception.ErrorCode.NICKNAME_ALREADY_EXISTED;
32-
import static com.example.solidconnection.custom.exception.ErrorCode.PROFILE_IMAGE_NEEDED;
3332
import static com.example.solidconnection.siteuser.service.MyPageService.MIN_DAYS_BETWEEN_NICKNAME_CHANGES;
3433
import static com.example.solidconnection.siteuser.service.MyPageService.NICKNAME_LAST_CHANGE_DATE_FORMAT;
3534
import static org.assertj.core.api.Assertions.assertThat;
@@ -144,18 +143,6 @@ class 프로필_이미지_수정_테스트 {
144143
// then
145144
then(s3Service).should().deleteExProfile(testUser);
146145
}
147-
148-
@Test
149-
void 빈_이미지_파일로_프로필을_수정하면_예외_응답을_반환한다() {
150-
// given
151-
SiteUser testUser = createSiteUser();
152-
MockMultipartFile emptyFile = createEmptyImageFile();
153-
154-
// when & then
155-
assertThatCode(() -> myPageService.updateMyPageInfo(testUser, emptyFile, "newNickname"))
156-
.isInstanceOf(CustomException.class)
157-
.hasMessage(PROFILE_IMAGE_NEEDED.getMessage());
158-
}
159146
}
160147

161148
@Nested
@@ -273,15 +260,6 @@ private MockMultipartFile createValidImageFile() {
273260
);
274261
}
275262

276-
private MockMultipartFile createEmptyImageFile() {
277-
return new MockMultipartFile(
278-
"image",
279-
"empty.jpg",
280-
"image/jpeg",
281-
new byte[0]
282-
);
283-
}
284-
285263
private String createExpectedErrorMessage(LocalDateTime modifiedAt) {
286264
String formatLastModifiedAt = String.format(
287265
"(마지막 수정 시간 : %s)",

0 commit comments

Comments
 (0)