Open letsgolgtwins opened 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
리뷰를 작성한 유저의 닉네임, 리뷰 글 내용, 유저가 영화에 매긴 별점(null 허용) 이 세 가지 요소를 하나의 카드에 담는 방식이다.
ReviewCard 도메인
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);
그래서 StarMapper XML에 movieId와 userOriginId를 파라미터로 보내서 point를 select 하는 쿼리를 만든 다음, 그걸 Integer 아웃풋으로 BO에서 받았다. 그리고 ReviewController에서
@autowired StarBO
를 통해 의존성 주입을 한 다음 model에 담아 movieReviewList.html view화면으로 보낼라고 했었다.근데 ReviewController에서 movieId는 RequestParam으로 잘 가져오는데, 문제는 userOriginId를 session을 통해 받아온다는 점이었다. 그러면 유저 각각의 userOriginId가 아닌, 현재 로그인 되어있는 유저의 userOriginId가 들어가게 된다. 여기서 문제가 발생했다.
방법을 생각해 보겠다. > 하나의 카드 형태로 만들어서 그 카드 안에 리뷰를 작성한 유저의 닉네임, 리뷰 내용, 유저가 이 영화에 매긴 별점이 뜨게끔 만드는 방법