Skip to content

Commit 2e413c7

Browse files
committed
refactor(signup) : 디폴트 이미지 및 소개글은 는 db에 null로 저장하고 프론트한테는 기본 이미지 링크나 기본 소개글로 반환하는 방향으로 통일
1 parent 7f7a870 commit 2e413c7

13 files changed

Lines changed: 107 additions & 92 deletions

src/main/java/com/example/FixLog/FixLogApplication.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22

33
import org.springframework.boot.SpringApplication;
44
import org.springframework.boot.autoconfigure.SpringBootApplication;
5+
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
56

7+
//Create_At 어노테이션
8+
@EnableJpaAuditing
69
@SpringBootApplication
710
public class FixLogApplication {
811

src/main/java/com/example/FixLog/controller/MemberController.java

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

33
import com.example.FixLog.domain.member.Member;
44
import com.example.FixLog.dto.Response;
5+
import com.example.FixLog.dto.WithdrawRequestDto;
56
import com.example.FixLog.dto.member.MemberInfoResponseDto;
67
import com.example.FixLog.dto.member.SignupRequestDto;
78
import com.example.FixLog.dto.member.DuplicateCheckResponseDto;
@@ -51,8 +52,11 @@ public ResponseEntity<Response<MemberInfoResponseDto>> getMyInfo(@Authentication
5152
}
5253

5354
@DeleteMapping("/me")
54-
public ResponseEntity<Response<Void>> withdraw(@AuthenticationPrincipal Member member) {
55-
memberService.withdraw(member);
55+
public ResponseEntity<Response<Void>> withdraw(
56+
@AuthenticationPrincipal Member member,
57+
@RequestBody WithdrawRequestDto request
58+
) {
59+
memberService.withdraw(member, request.getPassword());
5660
return ResponseEntity.ok(Response.success("회원 탈퇴 성공", null));
5761
}
5862
}

src/main/java/com/example/FixLog/controller/MypagePostController.java

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -33,18 +33,18 @@ public ResponseEntity<Response<PageResponseDto<MyPostPageResponseDto>>> getMyPos
3333
return ResponseEntity.ok(Response.success("내가 작성한 글 보기 성공", data));
3434
}
3535

36-
// 내가 좋아요한 글
37-
@GetMapping("/likes")
38-
public ResponseEntity<Response<PageResponseDto<MyPostPageResponseDto>>> getLikedPosts(
39-
@AuthenticationPrincipal UserDetails userDetails,
40-
@RequestParam(defaultValue = "0") int page,
41-
@RequestParam(defaultValue = "4") int size,
42-
@RequestParam(defaultValue = "0") int sort) {
43-
44-
String email = userDetails.getUsername();
45-
PageResponseDto<MyPostPageResponseDto> result = mypagePostService.getLikedPosts(email, page, sort, size);
46-
return ResponseEntity.ok(Response.success("내가 좋아요한 글 보기 성공", result));
47-
}
36+
// // 내가 좋아요한 글
37+
// @GetMapping("/likes")
38+
// public ResponseEntity<Response<PageResponseDto<MyPostPageResponseDto>>> getLikedPosts(
39+
// @AuthenticationPrincipal UserDetails userDetails,
40+
// @RequestParam(defaultValue = "0") int page,
41+
// @RequestParam(defaultValue = "4") int size,
42+
// @RequestParam(defaultValue = "0") int sort) {
43+
//
44+
// String email = userDetails.getUsername();
45+
// PageResponseDto<MyPostPageResponseDto> result = mypagePostService.getLikedPosts(email, page, sort, size);
46+
// return ResponseEntity.ok(Response.success("내가 좋아요한 글 보기 성공", result));
47+
// }
4848

4949

5050
}

src/main/java/com/example/FixLog/domain/member/Member.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ public void setIsDeleted(boolean isDeleted) {
5757
@Column
5858
private LocalDateTime updatedAt;
5959

60-
// 프로필 사진 url, 지금은 nullable 이지만 나중에 기본값 설정
60+
// 프로필 사진 url
6161
@Column
6262
private String profileImageUrl;
6363

@@ -84,7 +84,7 @@ public static Member of(String email, String password, String nickname, SocialTy
8484
member.nickname = nickname;
8585
member.socialType = socialType;
8686
member.isDeleted = false;
87-
member.profileImageUrl = "https://dummyimage.com/200x200/cccccc/ffffff&text=Profile"; // 기본 프로필 이미지(임시)
87+
member.profileImageUrl = null; // 디폴트 이미지는 db에 null로 저장하고 프론트한테는 기본 이미지 링크로 반환하는 방향으로 통일
8888
return member;
8989
}
9090

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.example.FixLog.dto;
2+
3+
import lombok.Getter;
4+
5+
@Getter
6+
public class WithdrawRequestDto {
7+
private String password;
8+
}

src/main/java/com/example/FixLog/dto/member/LoginResponseDto.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.example.FixLog.dto.member;
22

3+
import com.example.FixLog.domain.member.Member;
4+
import com.example.FixLog.util.DefaultImage;
35
import com.fasterxml.jackson.annotation.JsonInclude;
46
import lombok.AllArgsConstructor;
57
import lombok.Getter;
@@ -12,4 +14,16 @@ public class LoginResponseDto {
1214
private String accessToken;
1315
private String nickname;
1416
private String profileImageUrl;
17+
18+
// 정적 팩토리 메서드
19+
public static LoginResponseDto from(Member member, String accessToken) {
20+
return new LoginResponseDto(
21+
member.getUserId(),
22+
accessToken,
23+
member.getNickname(),
24+
member.getProfileImageUrl() != null
25+
? member.getProfileImageUrl()
26+
: DefaultImage.PROFILE
27+
);
28+
}
1529
}

src/main/java/com/example/FixLog/dto/member/MemberInfoResponseDto.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package com.example.FixLog.dto.member;
22

3+
import com.example.FixLog.domain.member.Member;
34
import com.example.FixLog.domain.member.SocialType;
5+
import com.example.FixLog.util.DefaultImage;
6+
import com.example.FixLog.util.DefaultText;
47
import lombok.AllArgsConstructor;
58
import lombok.Getter;
69

@@ -12,4 +15,18 @@ public class MemberInfoResponseDto {
1215
private String profileImageUrl;
1316
private String bio;
1417
private SocialType socialType;
18+
19+
public static MemberInfoResponseDto from(Member member) {
20+
return new MemberInfoResponseDto(
21+
member.getEmail(),
22+
member.getNickname(),
23+
member.getProfileImageUrl() != null
24+
? member.getProfileImageUrl()
25+
: DefaultImage.PROFILE,
26+
member.getBio() != null
27+
? member.getBio()
28+
: DefaultText.BIO,
29+
member.getSocialType()
30+
);
31+
}
1532
}

src/main/java/com/example/FixLog/service/AuthService.java

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -29,17 +29,7 @@ public LoginResponseDto login(LoginRequestDto requestDto) {
2929

3030
String token = jwtUtil.createToken(member.getUserId(), member.getEmail());
3131

32-
// 로그인 응답 시에도 null-safe하게 처리
33-
String profileUrl = member.getProfileImageUrl() != null
34-
? member.getProfileImageUrl()
35-
: "https://dummyimage.com/200x200/cccccc/ffffff&text=Profile";
36-
37-
return new LoginResponseDto(
38-
member.getUserId(),
39-
token,
40-
member.getNickname(),
41-
member.getProfileImageUrl() != null
42-
? member.getProfileImageUrl()
43-
: "https://your-cdn.com/images/default-profile.png");
32+
// 응답에서 null-safe하게 기본 이미지 처리 포함
33+
return LoginResponseDto.from(member, token);
4434
}
45-
}
35+
}

src/main/java/com/example/FixLog/service/MemberService.java

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -33,22 +33,20 @@ public void signup(SignupRequestDto request) {
3333
throw new CustomException(ErrorCode.NICKNAME_DUPLICATED);
3434
}
3535

36-
// 문제 없으면 저장
36+
// 회원 객체 생성 (profileImageUrl = null)
3737
Member member = Member.of(
3838
request.getEmail(),
3939
passwordEncoder.encode(request.getPassword()),
4040
request.getNickname(),
4141
SocialType.EMAIL
4242
);
43-
// 기본 프로필 이미지 URL 생성
44-
member.setProfileImageUrl("https://dummyimage.com/200x200/cccccc/ffffff&text=Profile");
45-
// 먼저 회원 정보 저장
43+
44+
// 회원 저장
4645
memberRepository.save(member);
4746

4847
// 기본 폴더 생성
4948
BookmarkFolder newFolder = new BookmarkFolder(member);
5049
bookmarkFolderRepository.save(newFolder);
51-
5250
}
5351

5452
public boolean isEmailDuplicated(String email) {
@@ -58,19 +56,22 @@ public boolean isEmailDuplicated(String email) {
5856
public boolean isNicknameDuplicated(String nickname) {
5957
return memberRepository.findByNickname(nickname).isPresent();
6058
}
61-
59+
6260
// 현재 로그인한 사용자 정보 member 객체로 반환
6361
public Member getCurrentMemberInfo(){
6462
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
6563
String userEmail = authentication.getName();
6664
return memberRepository.findByEmail(userEmail)
6765
.orElseThrow(() -> new CustomException(ErrorCode.USER_EMAIL_NOT_FOUND));
6866
}
69-
67+
7068
// 회원탈퇴
71-
public void withdraw(Member member) {
69+
public void withdraw(Member member, String password) {
70+
if (!passwordEncoder.matches(password, member.getPassword())) {
71+
throw new CustomException(ErrorCode.INVALID_PASSWORD);
72+
}
73+
7274
member.setIsDeleted(true);
7375
memberRepository.save(member);
7476
}
75-
}
76-
77+
}
Lines changed: 1 addition & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.example.FixLog.service;
22

3-
import com.example.FixLog.domain.like.PostLike;
43
import com.example.FixLog.domain.member.Member;
54
import com.example.FixLog.domain.post.Post;
65
import com.example.FixLog.dto.PageResponseDto;
@@ -9,7 +8,6 @@
98
import com.example.FixLog.exception.ErrorCode;
109
import com.example.FixLog.repository.MemberRepository;
1110
import com.example.FixLog.repository.fork.ForkRepository;
12-
import com.example.FixLog.repository.like.PostLikeRepository;
1311
import com.example.FixLog.repository.post.PostRepository;
1412
import org.springframework.data.domain.Page;
1513
import org.springframework.data.domain.PageRequest;
@@ -27,13 +25,11 @@ public class MypagePostService {
2725
private final PostRepository postRepository;
2826
private final MemberRepository memberRepository;
2927
private final ForkRepository forkRepository;
30-
private final PostLikeRepository postLikeRepository;
3128

32-
public MypagePostService(PostRepository postRepository, MemberRepository memberRepository, ForkRepository forkRepository, PostLikeRepository postLikeRepository) {
29+
public MypagePostService(PostRepository postRepository, MemberRepository memberRepository, ForkRepository forkRepository) {
3330
this.postRepository = postRepository;
3431
this.memberRepository = memberRepository;
3532
this.forkRepository = forkRepository;
36-
this.postLikeRepository = postLikeRepository;
3733
}
3834

3935
// 내가 쓴 글 보기
@@ -61,31 +57,4 @@ public PageResponseDto<MyPostPageResponseDto> getMyPosts(String email, int page,
6157
)
6258
);
6359
}
64-
65-
// 내가 좋아요한 글 보기
66-
public PageResponseDto<MyPostPageResponseDto> getLikedPosts(String email, int page, int sort, int size) {
67-
Member member = memberRepository.findByEmail(email)
68-
.orElseThrow(() -> new CustomException(ErrorCode.USER_EMAIL_NOT_FOUND));
69-
70-
// 1: 오래된순, 0: 최신순
71-
Sort.Direction direction = (sort == 1) ? Sort.Direction.ASC : Sort.Direction.DESC;
72-
Pageable pageable = PageRequest.of(page, size, Sort.by(direction, "postId.createdAt"));
73-
74-
Page<PostLike> postLikePage = postLikeRepository.findByUserId(member, pageable);
75-
List<Post> likedPosts = postLikePage.map(PostLike::getPostId).getContent();
76-
77-
// fork count 한번에 조회
78-
List<Object[]> forkCounts = forkRepository.countForksByOriginalPosts(likedPosts);
79-
Map<Long, Integer> forkCountMap = forkCounts.stream()
80-
.collect(Collectors.toMap(
81-
row -> (Long) row[0],
82-
row -> ((Long) row[1]).intValue()
83-
));
84-
85-
return PageResponseDto.from(postLikePage.map(PostLike::getPostId), post ->
86-
MyPostPageResponseDto.from(post, forkCountMap.getOrDefault(post.getPostId(), 0))
87-
);
88-
}
89-
90-
9160
}

0 commit comments

Comments
 (0)