Skip to content

Commit 888f439

Browse files
committed
fix: 프로필이미지 null 또는 빈 문자열일시 DefaultImage 적용
1 parent 29b87a7 commit 888f439

2 files changed

Lines changed: 40 additions & 5 deletions

File tree

src/main/java/com/project/Journey/login/member/dto/ProfileUpdateRequestDTO.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,7 @@ public class ProfileUpdateRequestDTO {
3939
@Schema(description = "태그 목록(최대 3개, 각 6자 이하)", example = "[\"캠핑좋아\",\"사진기사임\"]")
4040
@Size(max = 3, message = "태그는 최대 3개까지만 저장할 수 있습니다")
4141
private List<@Size(max = 6, message = "태그 한 글자는 6자 이하") String> tags;
42+
43+
@Schema(description = "프로필 이미지 URL(선택)", example = "https://bucket.s3.amazonaws.com/user/uuid.png")
44+
private String profileImage;
4245
}

src/main/java/com/project/Journey/login/member/service/ProfileService.java

Lines changed: 37 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,13 @@ public class ProfileService {
2626
private final MemberTagRepository tagRepo;
2727
private final S3Service s3Service;
2828

29+
private static final String DEFAULT_PROFILE_IMAGE_URL =
30+
"https://journeybucket0.s3.ap-northeast-2.amazonaws.com/USER/0089e5c3-05c3-466b-8fd5-56c41f14acc9.png";
31+
32+
private String resolveProfileImage(String imageUrl) {
33+
return (imageUrl == null || imageUrl.isBlank()) ? DEFAULT_PROFILE_IMAGE_URL : imageUrl;
34+
}
35+
2936
@Transactional(readOnly = true)
3037
public ProfileResponseDTO getMyProfile(Long memberId) {
3138

@@ -41,7 +48,7 @@ public ProfileResponseDTO getMyProfile(Long memberId) {
4148
.region(m.getRegion())
4249
.homepage(m.getHomepage())
4350
.bio(m.getBio())
44-
.profileImage((m.getProfileImage()))
51+
.profileImage(resolveProfileImage(m.getProfileImage()))
4552
.tags(tagRepo.findByMember(m)
4653
.stream().map(MemberTag::getTag).toList())
4754
.build();
@@ -58,6 +65,13 @@ public ProfileResponseDTO updateProfile(Long memberId,
5865
m.updateProfile(dto.getNickname(), dto.getAge(), dto.getGender(),
5966
dto.getRegion(), dto.getHomepage(), dto.getBio());
6067

68+
String imageUrl = dto.getProfileImage();
69+
if (imageUrl == null || imageUrl.isBlank()) {
70+
m.setProfileImage(DEFAULT_PROFILE_IMAGE_URL);
71+
} else {
72+
m.setProfileImage(imageUrl);
73+
}
74+
6175
tagRepo.deleteByMember(m);
6276
if (dto.getTags() != null && !dto.getTags().isEmpty()) {
6377
if (dto.getTags().size() > 3)
@@ -90,7 +104,7 @@ public ProfileImageResponseDTO getProfileImage(Long memberId) {
90104
return ProfileImageResponseDTO.builder()
91105
.memberId(member.getId())
92106
.nickname(member.getDisplayName())
93-
.profileImage(member.getProfileImage())
107+
.profileImage(resolveProfileImage(member.getProfileImage()))
94108
.build();
95109
}
96110

@@ -102,9 +116,27 @@ public ProfileImageResponseDTO updateProfileImage(Long memberId,
102116
Member member = memberRepo.findById(memberId)
103117
.orElseThrow(() -> new EntityNotFoundException("회원 없음"));
104118

105-
if (member.getProfileImage() != null)
106-
s3Service.deleteS3Image(member.getProfileImage());
119+
// 파일이 없거나 비어 있으면 → 기본 이미지로
120+
if (file == null || file.isEmpty()) {
121+
if (member.getProfileImage() != null && !member.getProfileImage().isBlank()) {
122+
s3Service.deleteS3Image(member.getProfileImage());
123+
}
124+
125+
// 기본 이미지로 리셋
126+
member.setProfileImage(DEFAULT_PROFILE_IMAGE_URL);
127+
syncPrincipalIfPresent(memberId, member);
128+
129+
return ProfileImageResponseDTO.builder()
130+
.memberId(member.getId())
131+
.nickname(member.getDisplayName())
132+
.profileImage(DEFAULT_PROFILE_IMAGE_URL)
133+
.build();
134+
}
107135

136+
// 기존 이미지 삭제
137+
if (member.getProfileImage() != null && !member.getProfileImage().isBlank()) {
138+
s3Service.deleteS3Image(member.getProfileImage());
139+
}
108140
String imageUrl = s3Service.uploadProfileImage(file, member.getRole());
109141
member.setProfileImage(imageUrl);
110142

@@ -128,7 +160,7 @@ private ProfileResponseDTO toProfileDTO(Member m) {
128160
.region(m.getRegion())
129161
.homepage(m.getHomepage())
130162
.bio(m.getBio())
131-
.profileImage(m.getProfileImage())
163+
.profileImage(resolveProfileImage(m.getProfileImage()))
132164
.tags(tagRepo.findByMember(m)
133165
.stream()
134166
.map(MemberTag::getTag)

0 commit comments

Comments
 (0)