본문 바로가기

개발일기/프로젝트 일기

HealthDuo - 무한대댓글(JPA)

 

@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