[Project] 2차 프로젝트 - 리뷰 삭제

김호정's avatar
Oct 25, 2024
[Project] 2차 프로젝트 - 리뷰 삭제
  1. 서비스 구현
  1. 컨트롤러 구현

1. 서비스 구현

서비스 구현
  1. 리뷰 있는지 확인
  1. 리뷰 삭제 권한 확인
  1. 리뷰 삭제

1. 리뷰 있는지 확인

댓글 삭제 메서드를 만들고 파라미터로 Long id를 받는다.
받은 id로 댓글이 있는지 확인하고
notion image
 

2. 리뷰 삭제 권한 확인

  • 생각 로그인 할 때 JWT토큰을 받고 토큰 안에 userId가 있으니까 그것과 리뷰 있는지 없는지 확인 할 때 리뷰가 가지고 있는 userId와 비교하면 될 것 같음
  1. 먼저는 토큰을 가지고 와야 함 JwtUtil로 이동 HttpServletRequest Header에 토큰이 있을 거니까 Authorization이름의 해더를 뽑아오고, Bearer 를 지운 나머지 부분을 가지고 온다
notion image
 
  1. 토큰 가지고 왔으면 토큰 안에 있는 userId를 뽑아내기
notion image
notion image
 
  1. 찾은 userId와 리뷰의 userId를 비교 후 확인
notion image
 

3. 삭제하기

commentRepository에서 댓글 pk로 삭제한다!
notion image
 

2. 컨트롤러 구현

컨트롤러 구현
서비스에서 리뷰삭제 메서드를 호출하고 Json데이터 보내기
notion image
 

문제가 있었음

문제
  • 리뷰 삭제 메서드를 실행 후 책 상세보기를 하면 책이 존재하지 않는다는 throw가 나옴
 
  1. 리뷰 삭제를 하면 책 자체가 없어지나?
  1. 리뷰는 삭제가 잘 되는건가?
  1. 둘 다 아니라면 뭐가 문제인가?
 
일단 리뷰를 삭제해보자
포스트맨에서 확인해보니 200 성공이 나왔고
notion image

1. 리뷰 삭제를 하면 책 자체가 없어지나?

책 있음
notion image

2. 리뷰는 삭제가 잘 되는건가?

h2에 가서 댓글 있는지 삭제 여부 확인
4번 없어짐
notion image
 
그러면 무슨 문제인가?

3. 책도 있고, 댓글도 잘 삭제 됐는데 상세보기 페이지에서 문제가 생겼으니 여기가 문제다

만들어둔 DetailDTO에서 문제가 있나 싶어 확인
필요한 것들 다 있고
이상 없어 보임 아직은 모름
 
생각해보니 bookRepository에서 쿼리문이 문제가 있나 생각함
왜냐하면 지금 계속 오류가 해당 책이 없습니다 라고 계속 뜨기에
notion image
 
@Query("SELECT b FROM Book b JOIN fetch b.comments ct JOIN fetch ct.user u WHERE b.isbn13 = :isbn13") Optional<Book> mFindByIdWithComment(@Param("isbn13") String isbn13);
inner join을 사용했었는데 이러면 매칭되는 데이터가 없으면 그 레코드를 포함하지 않아서 책이 결과에서 제외될 수 있다! 그래서
left join으로 만드니까
@Query("SELECT b FROM Book b left JOIN fetch b.comments ct left JOIN fetch ct.user u WHERE b.isbn13 = :isbn13") Optional<Book> mFindByIdWithComment(@Param("isbn13") String isbn13)
 
결과
보인다
notion image
 
 
 
Share article

keepgoing