-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Fix] 댓글 개수 조회 차단된 유저의 댓글 및 답글 제외 #304
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -10,6 +10,7 @@ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import lombok.RequiredArgsConstructor; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import org.springframework.stereotype.Repository; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import java.util.Collection; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import java.util.List; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import java.util.Map; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import java.util.Optional; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -152,4 +153,31 @@ private JPQLQuery<Long> findFirstReplyIds(List<Comment> parents) { | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
.groupBy(comment.parent.id) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
.where(comment.parent.in(parents)); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
public List<Long> findIdsByUserIds(Long insightId, Collection<Long> blockedUserIds) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return queryFactory | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
.select(comment.id) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
.from(comment) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
.where(comment.insight.id.eq(insightId)) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
.where(comment.writer.id.in(blockedUserIds)) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
.fetch(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
public Long countByParentIds(List<Long> blockedUserCommentIds) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return queryFactory | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
.select(comment.count()) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
.from(comment) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
.where(comment.parent.id.in(blockedUserCommentIds)) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
.fetchFirst(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
public Long countRepliesByUserIds(Long insightId, Collection<Long> blockedUserIds) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return queryFactory | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
.select(comment.count()) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
.from(comment) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
.where(comment.insight.id.eq(insightId)) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
.where(comment.parent.id.isNotNull()) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
.where(comment.writer.id.in(blockedUserIds)) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
.fetchFirst(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 이 컨벤션은 변경전이 기존에 사용해왔던 컨벤션이라서, 맞춘다면 여기만이 아니라 코드 전반적으로 맞추는게 좋아보여요. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 네 말씀하신건 인지중 보일때마다 조금씩 고쳐요 전 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 사실 우리 컨벤션은 객체.메소드 까지만 첫줄에 허용하고 있었던거아닌가요 ㅋㅋ 쿼리라서 다른 걸 적용할 필요는 없어보여서요 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 네네. 맞추는게 좋아보여요. 우선 저 파일은 전부 수정할게요 ㅎㅎ |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -12,13 +12,15 @@ | |
import ccc.keewedomain.persistence.repository.utils.CursorPageable; | ||
import ccc.keewedomain.service.insight.query.InsightQueryDomainService; | ||
import ccc.keewedomain.service.user.UserDomainService; | ||
import ccc.keewedomain.service.user.query.ProfileQueryDomainService; | ||
import lombok.RequiredArgsConstructor; | ||
import org.springframework.stereotype.Service; | ||
|
||
import java.util.List; | ||
import java.util.Map; | ||
import java.util.Objects; | ||
import java.util.Optional; | ||
import java.util.Set; | ||
|
||
@Service | ||
@RequiredArgsConstructor | ||
|
@@ -28,6 +30,7 @@ public class CommentDomainService { | |
private final CommentQueryRepository commentQueryRepository; | ||
private final InsightQueryDomainService insightQueryDomainService; | ||
private final UserDomainService userDomainService; | ||
private final ProfileQueryDomainService profileQueryDomainService; | ||
|
||
public Comment create(CommentCreateDto dto) { | ||
Insight insight = insightQueryDomainService.getByIdOrElseThrow(dto.getInsightId()); | ||
|
@@ -68,8 +71,20 @@ private void validateHasNoParent(Comment comment) { | |
} | ||
} | ||
|
||
public Long countByInsightId(Long insightId) { | ||
return commentQueryRepository.countByInsightId(insightId); | ||
public Long countByInsightId(Long insightId, Long userId) { | ||
Long commentCount = commentQueryRepository.countByInsightId(insightId); | ||
Set<Long> blockedUserIds = profileQueryDomainService.findBlockedUserIds(userId); | ||
if(blockedUserIds.isEmpty()) { | ||
return commentCount; | ||
} | ||
// 1. 차단한 유저의 댓글 제외 - 차단한 유저들이 작성한 댓글의 id 조회 | ||
List<Long> blockedUserCommentIds = commentQueryRepository.findIdsByUserIds(insightId, blockedUserIds); | ||
// 2. 차단한 유저의 댓글에 달린 답글 제외 - 1에서 조회한 id가 parent인 댓글 개수 조회 | ||
Long replyOnBlockedCommentCount = commentQueryRepository.countByParentIds(blockedUserCommentIds); | ||
// 3. 차단한 유저의 답글 수 조회 - 1, 2에서 중복으로 제거되는 개수 보완 목적 | ||
Long dupBlockedReplyCount = commentQueryRepository.countRepliesByUserIds(insightId, blockedUserIds); | ||
// 4. 전체 개수에서 빼기 | ||
return commentCount - blockedUserCommentIds.size() - replyOnBlockedCommentCount + dupBlockedReplyCount; | ||
Comment on lines
+74
to
+87
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 👍 Comment를 사용해서 필터링 했으면 더 간단했을거같네요 ㅋㅋ 고생하셨어요 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 맞는 말이네요 ㅎㅎ There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 👍 |
||
} | ||
|
||
public Map<Long, Long> getReplyNumbers(List<Comment> parents) { | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
checkBlocking
으로 메소드 명 수정하는건 어때요?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
바꾸면
checkBlockingInsightWriter
말씀하신게 맞을까요?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
아뇨 그냥 간단하게 checkBlocking ㅎ
이유는 이게 필터링 역할 같지는 않아서요 -> 제가 생각한 필터링 역할은 리스트에서 항목을 걸러내는 것을 생각했어요
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
차단 관련된 기능이 여러개(insight 작성자, user의 id, 응답에서 제거) 있어서 저거 하나만 checkBlocking로 바꾸기는 어려울 것 같아요.
필터링 키워드를 바꾼다면, 위에서 말씀드린
checkBlockingInsightWriter
처럼 적용 대상에 대한 정보가 필요해요.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
네 전 예외를 던지는 것과 리스트에서 값 제거하는게 명확하게 구분됐으면 해요
위 사항이 목적이고 다른 부분은 상관없어요
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
수정했어요. 한번 확인 부탁드려요 ㅎㅎ