TIL

이 글도 공감해주세요 게시판 기능 수정

haedal-uni 2022. 12. 1. 20:27
728x90

연관관계 매핑이 끝났으니 이제 기능을 수정했다.

* Registry(게시글) , Comment(댓글) - 1:N 관계

연관관계 매핑을 하게 된 이유가 바로 이 기능을 수정하기 위해서 였다.

 

기존에 이 글도 공감해주세요 게시판에는 댓글이 없는 게시글을 10개 띄워주고 있다.

 

문제점은 페이지 별로 띄워준다는 것이었다.

1페이지에서 댓글 0개인 게시글이 없다면 "이 글도 공감해주세요" 게시판에는

아무것도 띄워지지 않는 것이다.

 

1페이지만 보는 사람이 있다고 가정하면

2페이지 이상에 존재하는 댓글이 0개인 게시글을 확인하지 못한다는 문제가 생겨

해당 기능이 쓸모가 없어지는 것이다.

 

따라서 이 기능을 수정해서 전체 게시글 중에 댓글이 없는 게시글을 모아서

가장 오래된 순으로 10개만 띄워주기로 했다.

 

 

 

front에서는 페이지 별로 띄워주는 게시판과 댓글이 필요한 게시판을 분리시켰다.

 

backend에서는 registry와 comment의 repository에서 각각 id값을 가져와 

registry에는 존재하지만 comment에는 존재하지 않는 id값을 list에 넣어서

해당 list에 넣인 id 값을 registryRepository.findById()에 넣어 게시글 정보를 가져왔다.

 

 


 

 

Repository

어떻게 id값만 모두 가져올까 고민하다가 이 전에 스터디 하면서 배운

@Query 어노테이션을 사용해 JPQL을 직접 작성해봤다.

@Query("select r.idx from Registry r")
ArrayList<Long> findAllByIdx();
@Query("select c.registry.idx from Comment c")
ArrayList<Long> findAllByRegistry_Idx();

 

 

 

ServiceImpl  

List로 Registry의 id값을 모두 저장해서 allByIdx에 저장했다.

List로 Comment의 Registry의 id값을 모두 allByRegistry_idx에 저장했다.

 

temp라는 리스트를 생성해서 allByIdx 값을 넣어주고 

allByRegistry_idx에 있는 값들을 temp에서 지워줬다.

List<Long> allByIdx = registryRepository.findAllByIdx();
List<Long> allByRegistry_idx = commentRepository.findAllByRegistry_Idx();
List<Long> temp = new LinkedList<>();
temp.addAll(allByIdx);

for (Long item : allByIdx) {
    if (allByRegistry_idx.contains(item) == true) {
        temp.remove(item);
    }
}

 

 

그리고 남은 값들을 활용해서 게시판에 띄워준다.

 

 

해당 게시판에서는 10개만 띄워줄 것이고 해당 코드로 작성하면 경우의 수가 3개였다.

1. 10개 초과일 때

2. 10개 이하일 때

3. 0개 일 때(모든 게시글에 댓글이 적혀있는 경우)

 

1번 같은 경우는 10개까지만 사용하기 위해서, 2번은 배열 길이만큼 for문을 돌렸고 

3번은 임시로 Registry 객체를 만들어서 특정 값을 넣어줬고 front에서 그 특정 값과 일치하는 경우에는

댓글이 필요한 게시글이 없다고 작성했다.

 

 

아래 gif로 보면

가장 오래된 순으로 댓글이 없는 게시글을 오른쪽에 띄워주고 있다.

더 이상 페이지 별로 띄워주지 않고 전체 게시글에서 db를 가져오고 있다.

제목이 "1번" 이라고 적힌 게시글에 댓글을 적는 순간 1번 게시글은 사라지고 상단이 "2번" 게시글로 바뀌어있다.

이 글도 공감해주세요 게시판에서 제일 상단 "1번" 타이틀에 댓글 작성 GIF

 

가장 상단 게시글에 댓글을 작성하니 2번째 위치에 있던 게시글이 제일 상단으로 띄워졌다.

 

1번이 사라지고 2번이 제일 상단으로 올라왔고 마지막은 댓글이 없는 다른 게시글로 띄워졌다.

 

title이 1번이라고 적힌 게시글에는 댓글이 1개 있다고 띄워져 있다.

 

가장 오래 작성된 게시글 부터 띄워주고 있다. (4페이지가 마지막 페이지)

 

 

 

댓글이 필요한 게시글이 없는 경우 + 댓글이 하나 있을 때 GIF

댓글이 하나만 있을 때 삭제후에 해당 게시판에 댓글이 필요하다고 띄워주고 있다.

728x90

'TIL' 카테고리의 다른 글

스터디 요약  (0) 2022.12.04
프로젝트 관련 공부  (0) 2022.12.03
연관관계 글 정리 완료  (0) 2022.11.29
연관관계 매핑 후 수정  (0) 2022.11.20
연관관계 매핑 프로젝트에 적용하기(코드)  (0) 2022.11.16