롤 전적 사이트 구현 - 댓글 정렬 (back)

essential·2023년 9월 4일
0

op.gg

목록 보기
13/16

이전에 올린 코드랑 별로 달라진 건 없고 쿼리만 달라졌다

ServiceImpl

    public int insertComment(CommentDTO dto) {
        CommentEntity comment = dto.toComment();

        if (comment.getCno() != 0) { // 대댓글
            handleReply(comment);
        } else { // 댓글
            handleComment(comment);
        }
        return 1;
    }

    private void handleComment(CommentEntity comment) {
        comment.setDepth(0);
        comment.setParent_cno(0);
        comment.setOrder_cno(0); //
        mapper.insertComment(comment);
        comment.setGroup_cno(comment.getCno()); // group_cno를 새로 생성된 cno로 설정
        mapper.updateGroupCno(comment);
    }


    private void handleReply(CommentEntity comment) {
        comment.setDepth(comment.getDepth() + 1);
        comment.setOrder_cno(comment.getOrder_cno()+1);
        comment.setParent_cno(comment.getCno());
        comment.setGroup_cno(comment.getGroup_cno());
        mapper.insertComment(comment);
    }

Mapper

    @Insert("INSERT INTO comments (bno, group_cno, parent_cno, content, depth, id, created_date, order_cno) VALUES(#{bno}, #{group_cno}, #{parent_cno}, #{content}, #{depth}, #{id}, SYSDATE, #{order_cno})")
    @Options(useGeneratedKeys = true, keyProperty = "cno", keyColumn = "cno")
    public int insertComment(CommentEntity commen);

    @Update("UPDATE comments SET group_cno = #{group_cno} WHERE cno = #{cno}")
    void updateGroupCno(CommentEntity comment);

    @Select("SELECT * FROM comments WHERE bno=#{bno} START WITH parent_cno = 0 CONNECT BY PRIOR cno = parent_cno ORDER SIBLINGS BY order_cno")
    public List<CommentDTO> getCommenList(int bno);

Mapper 에서 cno 가져오려고 넣은 Options 가 My SQL 에서는 KeyColumn 이 필요하지 않았는데 Oracle 은 필요하다! 꼭 넣어줘야 오류가 안 남..

댓글 정렬은 결국 오라클에서 사용 가능한 connect by 문을 썼고, 형제들의 순서는 order_cno 로 구분했다.

보통은 connect by 쓰면 depth로 비교하고 그다음 date로 order by~ 줘서 정렬할텐데
나는 My SQL 으로 로직짜느라 order_cno 컬럼이 있었기 때문에 그냥
order_cno로 같은 parent_cno 를 가진 경우 같은 레벨(형제)로 보고
형제들의 순서를 order_cno 로 정렬한 거다.

단 한 줄로 되는 걸 보니까... 허탈하고 속 시원하고 짜증나고 기쁘고 그랬다
다음에는 10초만에 할 수 있으면 좋겠다

profile
essential

0개의 댓글