Dev입성기/Dev 입성기_중기

프로필 조회시 좋아요 수 필드 추가하기

Mon Groy 2024. 7. 4. 20:00
프로필 조회시 응답필드에 내가 좋아요한 게시글/댓글 수 필드를 추가

 

 

고려 사항

1. 다른 사람도 볼 수 있는 프로필인지, 본인만 보는 프로필인지
2. count 용 column 을 따로 설정할 것인지, 불러올 때마다 count 하게 만들 것인지

*1번은 다른 사람도 보는 프로필로 정했다

여기서 만들어질 responseDto 는 아직 구현되어있지 않은 개인 프로필 보기에 추가할 dto로 사용해도 되겠다 생각했다

2.번은 불러올 때마다 count 하기로 정했다

column 을 추가한다면 like, thanks, follow 등만 따로 담은 Entity 를 만들게 되면 그 때 추가하는 게 좋을 거라는 판단에서다

 

ResponseDto 에 담을 필드값

nickname, likeCount, reviewCount, thanksCount

 

최대한 깔끔하게 그리고 새로운 방법을 시도해 보려고 Dto에 보낼 매개변수를 한 클래스에 담았다

SimpleProfileElements elements = new SimpleProfileElements(

         profileUser.getNickName(),

         likedAdapter.queryAllLikeCountByUser( profileUser ),

         userReviewsAdapter.queryAllReviewCountByUser( profileUser ),

         thanksAdapter.queryAllThanksCountByUser( profileUser )

);

 

public static UserProfileResponseDto of (SimpleProfileElements elements) {

          return UserProfileResponseDto.builder()

                    .nickname(elements.getNickname())

                    .likeCount(elements.getLikeCount())

                    .reviewCount(elements.getReviewCount())

                    .thanksCount(elements.getThanksCount())

                    .build();

}

*추후 해당 Dto 가 profile 관련한 일로 의 멤버변수가 늘어날 경우에도

simpleProfile을 내보내는 것엔 영향이 가지 않길 기대해본다

 

 fetch 메서드에 따른 반환값

fetch() : 조회 대상이 여러건일 경우. 컬렉션 반환
fetchOne() : 조회 대상이 1건일 경우(1건 이상일 경우 에러). generic에 지정한 타입으로 반환
fetchFirst() : 조회 대상이 1건이든 1건 이상이든 무조건 1건만 반환. 
내부에 보면 return limit(1).fetchOne() 으로 되어있음
fetchCount() : 개수 조회. long 타입 반환

출처: http://querydsl.com/static/querydsl/4.0.1/reference/ko-KR/html_single/

 

탈퇴를 할 경우 user 를 삭제하는 대신 userStatus 가 DISABLE 상태가 되도록 구현된 상태인데

탈퇴할 때 review나 thanks 의 상태도 DISABLE 로 바뀌도록 설정이 되어있지는 않아서

thanks 와 review 각각의 id 리스트를 불러오는 것에 대해 어떻게 처리할 것인가에 대한 고민을 했다

 

로그인한 유저가 한 댓글을 봤는데, 그 댓글의 유저는 탈퇴를 한 상태

탈퇴를 했어도 댓글은 유지되어도 괜찮음

그 댓글에 붙은 thanks 를 누른 사람 리스트에 탈퇴한 유저가 속하도록 할 것인가 말 것인가

일단은 조회돼도 괜찮을 거라는 결론을 내렸다

 

한 유저가 review 를 삭제해서 DISABLE 이 되었는데

그 유저가 작성한 글 List 를 작성자 본인이든, 다른 유저든 상관없이 누군가 로드했을 때

삭제했다고 생각했던 그 review가 살아있으면 안 되므로

작성한 review 리스트에서는 삭제하기로 했다

그러므로 JpaqueryFactory 를 통해 불러올 때 reviewId 뿐 아니라 reviewStatus 까지 고려해야 한다

더보기

로그인한 유저가 store 좋아요를 누가 눌렀는지 확인한다고 눌렀을 경우 좋아요를 누른 사람리스트가 나옴

그 중에 탈퇴한 유저가 로딩이 되면 될지 안 될지에 대한 고민

만약에 로딩이 가능하다고 하면, store 좋아요 개수를 조작할 수 있음

store 사장이 아닌 user 의 경우 email 가입이기 때문에 email 을 여러 개 만들어 가입하면

그 계정으로 store의 좋아요를 그 가입한 수만큼 누를 수 있음

즉, 조작이 가능하다는 뜻

따라서 store 좋아요 list 에서는 뜨지 않도록 하는 것이 좋은데 가입까지는 막기 어려운 것 같고

최소한 탈퇴한 유저가 좋아요 누른 것에 대해서는 취소가 되도록 설정을 해 둬야하지 않나 싶다

이건 좀 더 생각하는 시간을 갖기로 했다

따라서 ENABLE 상태인 것만 count 하도록 설정했다

.where(

userIdEq(user.getId()),

userReviews.reviewStatus.eq(ReviewStatus.ENABLE)

)