Spring/프로젝트 코드 리뷰

Spring 클론코딩 프로젝트 MovieController 랜덤출력

code2772 2023. 3. 3. 17:24
728x90
반응형

✔ 사전 준비(MovieService)

// 나라&장르 랜덤출력 하기위한 부분
@Transactional(readOnly = true)
public List<MovieDto> searchCri(String genre, String country) {
    //빈 웹툰리스폰스 리스트
    List<MovieDto> result = new ArrayList<>();
    List<MovieDto> result2 = new ArrayList<>(10);

    List<Movie> movieList2 = movieRepository.findByMovGenreContainingAndMovCountryContaining(genre, country);

    for(Movie m : movieList2){
        double sum = 0;
        int starCount = 0;
        for(Star star : m.getStar()){
            sum += star.getStarPoint();
            starCount = m.getStar().size();
        }
        Double avg = Math.round((sum / starCount) * 10.0) / 10.0;
        result.add(MovieDto.from(m, avg));
    }

    return result;
}

 

먼저 레포지토리에서 findByMovGenreContainingAndMovCountryContaing을 만들어준다. 

List<Movie> findByMovGenreContainingAndMovCountryContaining(String genre, String country);
 

위에 for문은 별점 평균을 메인페이지에서 보여주기 위한 부분이다. 있으면 보여주고 없으면 안보여주기 위해 구성하였다.

 

 

✔ 랜덤출력

@GetMapping(path="/main")
public String movie(
        ModelMap map,HttpSession session
){
    UserSessionDto userSessionDto = (UserSessionDto) session.getAttribute("userSession");
    map.addAttribute("userSession", userSessionDto);
    List<MovieDto> movies = movieService.movies();
    map.addAttribute("movies", movies);

    String[] gerneList = {"액션","액션","액션","코미디","코미디","코미디", "드라마","드라마"};
    String[] countryList = {"한국","한국","한국","한국","미국","미국", "미국"};
    String[] runningList = {"나 홀로","아이언","해리포터","나 홀로","아이언","해리포터"};
    Random rand = new Random();
    String randomJerne = gerneList[rand.nextInt(gerneList.length)];
    String randomCountry = countryList[rand.nextInt(countryList.length)];
    String randomRunning = runningList[rand.nextInt(runningList.length)];


    map.addAttribute("searchTop10Movie", searchService.searchTop10Movie());
    map.addAttribute("movieStar", movieService.movieStar());
    map.addAttribute("randomCountry", randomCountry);

    map.addAttribute("randomJerne",randomJerne);
    map.addAttribute("movieDtos", movieService.movieDtos());
    map.addAttribute("movieZero", movieService.movieZero());
    map.addAttribute("movies2", movieService.movies2(randomRunning));
    map.addAttribute("movies3", movieService.movies3());
    map.addAttribute("koreanMovies", movieService.searchCountry("한국"));
    map.addAttribute("americanMovies", movieService.searchCountry("미국"));
    map.addAttribute("dramas", movieService.searchDrama("드라마"));
    map.addAttribute("cris", movieService.searchCri(randomJerne,randomCountry));

    Long totalCnt = starService.getTotalCnt();
    map.addAttribute("totalCnt",totalCnt);
    return "movie/movieMain";
}

HttpSession session : 로그인 화면을 session으로 확인하기 위해 사용

 

✔ 랜덤출력

   String[] gerneList = {"액션","액션","액션","코미디","코미디","코미디", "드라마","드라마"};
    String[] countryList = {"한국","한국","한국","한국","미국","미국", "미국"};
    Random rand = new Random();
      String randomJerne = gerneList[rand.nextInt(gerneList.length)];
    String randomCountry = countryList[rand.nextInt(countryList.length)];

 

 map.addAttribute("cris", movieService.searchCri(randomJerne,randomCountry));

 

1. String형으로 리스트를 만들었다.

2. Random 함수를 사용하기

3. 만들었던 리스트들을 랜덤으로 출력해준다. 

4. 타임리프로 출력하기

 

✔ 타임리프에 출력하기

<!--범죄/한국 -->
<attr sel=".movie-table-cri" th:remove="all-but-first" >
    <attr sel=".movie-tr-cri" th:each="cris, i : ${cris}" >
        <attr sel=".movie-title" th:text="${cris.movTitle}"/>
        <attr sel=".movie-img" th:src="${cris.movThumbnail}" />
        <attr sel=".movie-making" th:text="${cris.movMakingDate} + ' ・ ' +  ${cris.movCountry}" />
        <!--                메인페이지 순서 count이용 증가 -->
        <attr sel=".movie-idx" th:text="${i.count}" />
        <!--                메인페이지 평균별점       -->
        <attr sel=".average"
              th:if="${cris.avg} != 0.0" th:text="'평균 ★ ' + (${cris.avg} != 0 ? ${cris.avg} : _)"/>
        <!--                넷플릭스 아이콘        -->
        <attr sel="div.css-5o7sb2" th:if="${cris.movWatch} != null and ${#strings.contains(cris.movWatch,'aHR0cHM6Ly93YXRjaGEuY29tL3dhd')}"/>
        <!--                왓챠 아이콘 -->
        <attr sel="div.css-oobk33" th:if="${cris.movWatch} != null and ${#strings.contains(cris.movWatch,'aHR0cHM6Ly93d3cubmV0ZmxpeC5jb20vdGl0b')}"/>
    </attr>
</attr>

 

✔ 결과

#장르#국가 부분이 해당 DB를 통해 랜덤으로 출력하게 된다.

반응형