@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부분
feat....
무한대 댓글 기능은 2월 말에 구현한 기능이고 생각보다 생각할게 많은 기능이었다. 그 당시 최대한 혼자
구글링 하지 않고 하루에 기능 하나씩 추가하고 싶은 욕심에 급하고 무식하게 코드를 짰는데 나중에 와
서 코드를 다시 보니 내가 쓴 코드를 이해하기가 어려웠다. (오류도 있었다...)
결론 적으로 코드를 짤 때 보기 좋고 SOILD에 맞춰서 짜는 게 얼마나 중요한지 알게 되는 공부였다.
'개발일기 > 프로젝트 일기' 카테고리의 다른 글
HealthDuo-게시글 쓰기 (0) | 2022.06.28 |
---|---|
HealthDuo-home 화면 (0) | 2022.06.28 |
HealthDuo - RedirectAttributes (0) | 2022.06.21 |
HomeTheater-좌석페이지 (0) | 2022.06.19 |
HealthDuo - 중복회원 검사 기능 추가(jpa,fetch) (0) | 2022.06.13 |