개발일기/프로젝트 일기
HealthDuo - 무한대댓글(JPA)
존태
2022. 6. 23. 00:22


@Override
public void CommentSave(String content, Bbs bbs, Member member) {
log.info("CommentSave(Service start)");
Integer commentGroup;
Integer commentCnt;
commentGroup = serviceMethod.incrementGroup();
commentCnt = serviceMethod.incrementCnt();
serviceMethod.saveComment(content, bbs, member, commentGroup, commentCnt);
}
/** 대댓글 저장
* checkInfo -> 부모댓글 구분
* @param content
* @param bbs
* @param member
* @param childinfo
* @param seq
*/
@Override
public void childCommentSave(String content, Bbs bbs, Member member, String childinfo, int seq) {
String childInfo = childinfo;
String[] sliceChildInfo = childInfo.split("L");
Integer commentGroupNubmer = Integer.parseInt(sliceChildInfo[1]);
Integer commentSequence;
Integer commentCnt;
Integer level;
Integer check = 0;
Integer commentSequenceFinded = commentRepository.findCommentMaxSequence(commentGroupNubmer);
if (Integer.parseInt(sliceChildInfo[2]) == 0) { //level이 0일때
commentSequence = commentSequenceFinded + 1;
level = 1;
commentCnt = commentRepository.findCommentCnt().get() + 1;
} else {
commentSequence = serviceMethod.sortLogic(seq, sliceChildInfo, commentGroupNubmer);
commentRepository.updateCheck(seq);
commentCnt = serviceMethod.incrementCnt();
level = serviceMethod.incrementLevel(sliceChildInfo);
}
Comment comment = new Comment(content, commentCnt, commentGroupNubmer, String.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))), commentSequence, level, childInfo, check);
comment.addBbs(bbs);
comment.addMember(member);
commentRepository.contentSave(comment);
}
무한 대댓글 기능 구현 -> 기본 로직은 fetch api로 chld_info 로 해당 댓글 comment_group 과 level정보를 얻는다.
L(comment_group 정보)L(level 정보 +1) -> L0L2 comment_group = 0 , level =3
level =0(대댓글이 아닌 일반 댓글 그리고 checkInfo =1 <- 일반댓글은 항상 부모댓글이다.) 에 달린 대댓글은
infCommentMaxSequence메소드를 통해 댓글중 가장 높은 commentSequence 번호를 찾고 그번호에 1를 추가하여 db에
저장한다.
level이 0이 아닌 대댓글에 댓글을 추가하게되면 sortLogic메서드를 통해 정렬기준을 세우고 updateCheck를 통해
checkInfo =1(부모댓글로 만들어준다.)로 업데이트해준다. 그리고 incrementLevel 메서드를 통해 대댓글에 레벨보다 +1
된 레벨을 저장해준다.
https://github.com/zontaee/HealthDuo/blob/master/src/main/java/Healthduo/demo/web/ServiceMethod.java 메서드 코드들
https://github.com/zontaee/HealthDuo/blob/master/src/main/java/Healthduo/demo/repository/CommentRepositoryCustomImpl.java repsoitory querydsl부분