letsgolgtwins / MovieReview

영화리뷰
0 stars 0 forks source link

리뷰 리스트 화면에서 각각의 유저가 매긴 별점 뜨게끔 하기 - 진행 상황 #12

Open letsgolgtwins opened 2 months ago

letsgolgtwins commented 2 months ago

그래서 StarMapper XML에 movieId와 userOriginId를 파라미터로 보내서 point를 select 하는 쿼리를 만든 다음, 그걸 Integer 아웃풋으로 BO에서 받았다. 그리고 ReviewController에서 @autowired StarBO를 통해 의존성 주입을 한 다음 model에 담아 movieReviewList.html view화면으로 보낼라고 했었다.

근데 ReviewController에서 movieId는 RequestParam으로 잘 가져오는데, 문제는 userOriginId를 session을 통해 받아온다는 점이었다. 그러면 유저 각각의 userOriginId가 아닌, 현재 로그인 되어있는 유저의 userOriginId가 들어가게 된다. 여기서 문제가 발생했다.

방법을 생각해 보겠다. > 하나의 카드 형태로 만들어서 그 카드 안에 리뷰를 작성한 유저의 닉네임, 리뷰 내용, 유저가 이 영화에 매긴 별점이 뜨게끔 만드는 방법

letsgolgtwins commented 2 months ago

Star id int PK movieId int userId int
point int

Review id int PK userId int movieId int userNickName String review String

StarMapperXML

movieId와 userId로 point를 내놓는 select 쿼리문

StarMapper

selectPointByMovieIdAndUserId(int movieId, int userId)

ReviewBO (StarBO로 안가고, ReviewBO로 간다. 왜냐? 리뷰 리스트 페이지는 Review패키지에서 담당하므로& ReviewController로 가기위해)

selectMovieReviewListByMovieId movieId로 모든 테이블 정보 가져오는 메소드를 List reviewList 에 담음. 그리고 그 reviewList를 반복문으로 순회한 다음, DI로 가져온 starMapper로 selectPointByMovieIdAndUserId(movieId, review.getUserId()) 를 가져오고, 그 결과를 int point에 저장. (그전에 Review도메인에 private int point 필드 추가) 그리고 review.setPoint(point) 를 해줌.

ReviewController

letsgolgtwins commented 2 months ago

리뷰를 작성한 유저의 닉네임, 리뷰 글 내용, 유저가 영화에 매긴 별점(null 허용) 이 세 가지 요소를 하나의 카드에 담는 방식이다.

ReviewCard 도메인

  1. 유저의 닉네임, 리뷰 글 내용은 review 테이블의 요소이므로 review 객체를 필드로 지정했다.
  2. 유저가 영화에 매긴 별점은 Integer starPoints로 지정했다. (매긴 별점이 없을 수도 있으니 Integer로 하였다.)

ReviewCard를 만드는 ReviewListBO에서
generateReviewCardList 메소드를 만들었다. ( input: int movieId / output: List )

List<ReviewCard> reviewLists = new ArrayList<>(); 로 reviewLists ReviewCard를 받는 리스트를 만들어준 뒤

의존성 주입으로 특정 영화의(int movieId) 리뷰 목록들을 가져와서 리스트를 만든다.

그리고 그 리뷰 목록을 반복문으로 순회한다.

그때그때마다 새롭게 저장되어야 하므로 ReviewCard reviewCard new ReviewCard(); 로 만든다.

그리고 각각 세팅

리뷰 내용들, 닉네임들 목록 세팅 reviewCard.setReview(review);

별점 가져오기 Integer starPoints = starBO.getPointByMovieIdAndUserId(movieId, review.getUserId()); (미리 만들어 놓은 특정 영화에 특정 유저가 매긴 point를 가져오는 매소드)

별점 세팅 reviewCard.setStarPoints(starPoints);

최종 저장 reviewLists.add(reviewCard);