스프링부트 공부기록(29) - 영화 리뷰 프로젝트 :: 영화 목록 처리, 리뷰 등록, 영화 상세 정보 조회 구현하기
my code archive
article thumbnail
반응형

🤍영화 목록 처리 구현하기

 

1. 이번에도 역시 전에 만들어둔 PageRequestDTO, PageResultDTO를 그대로 가져와서 사용한다.

 

2. MovieService 코드 작성

  • JPA를 통해 나오는 엔티티 객체들과 Double, Long 등의 값을 MovieDTO로 변환하는 entitiesToDto 추가

 

3. MovieServiceImpl 코드 작성

 

4. 목록 화면 list.html 작성

  • 페이징 코드는 기존과 동일하므로 생략한다.
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">

<th:block th:replace="~{/layout/basic::setContent(~{this::content})}">
    <th:block th:fragment="content">
        <h1 class="mt-4">Movie List Page
            <span>
                <a th:href="@{/movie/register}">
                    <button type="button" class="btn btn-outline-primary">REGISTER</button>
                </a>
            </span>
        </h1>

        <form action="/movie/list" method="get" id="searchForm">
            <input type="hidden" name="page" value="1">
        </form>

        <table class="table table-striped">
            <thead>
            <tr>
                <th scope="col">#</th>
                <th scope="col">Title & Picture</th>
                <th scope="col">Review Count</th>
                <th scope="col">AVG Rating</th>
                <th scope="col">Regdate</th>
            </tr>
            </thead>
            <tbody>
            <tr th:each="dto : ${result.dtoList}">
                <th scope="row">
                    <a th:href="@{/movie/read(mno = ${dto.mno}, page=${result.page})}">
                        [[${dto.mno}]]
                    </a>
                </th>
                <td><img th:if="${dto.imageDTOList.size()>0 && dto.imageDTOList[0].path !=null}"
                    th:src="|/display?fileName=${dto.imageDTOList[0].getThumbnailURL()}|">
                    [[${dto.title}]]
                </td>
                <td><b>[[${dto.reviewCnt}]]</b></td>
                <td><b>[[${dto.avg}]]</b></td>
                <td>[[${#temporals.format(dto.regDate, 'yyyy/MM/dd')}]]</td>
            </tr>
            </tbody>
        </table>

 

5. 컨트롤러 코드 작성

6. 데이터 뿌린 뒤 실행 화면

페이징도 잘 된다.


🤍영화 상세 조회 구현하기

1. MovieService, MovieServiceImpl 코드 작성

  • 특정한 영화 번호를 이용해서 MovieDTO를 반환하도록 구현한다.

 

2. MovieController 클래스 작성

3. 영화 조회 화면 read.html 작성

  • 포스터 이미지 업로드 부분
 <div class="uploadResult">
    <ul>
        <li th:each="movieImage : ${dto.imageDTOList}" th:data-file="${movieImage.getThumbnailURL()}">
            <img th:if="${movieImage.path != null}" th:src="|/display?fileName=${movieImage.getThumbnailURL()}|">
        </li>
    </ul>
</div>


🤍영화 리뷰 처리

1. ReviewDTO 작성

2. ReviewService 작성

  • 특정 영화 모든 리뷰를 가져오는 기능
  • 새로운 영화 리뷰 등록 기능
  • 특정 영화 리뷰 수정 기능
  • 특정 영화 리뷰 삭제 기능

 

3. ReviewServiceImpl 작성

 

4. ReviewController 작성

  • Ajax로 동작하기 때문에 @RestController로 설계

 

5. read.html에서 리뷰 처리

  • 이번에도 역시 모달창으로 구현한다.
  • 별점 처리 작업은 starrr 라이브러리로 처리한다.

  • reviewModal 화면에 띄우기
$(document).ready(function (e){
    var grade = 0;
    var mno = [[${dto.mno}]];

    $('.starrr').starrr({
        rating: grade,
        change: function (e,value){
            if(value){
                console.log(value);
                grade = value;
            }
        }
    });
    //$(".reviewModal").modal("show");    //미리보기 용
  • 구현 화면

6. 리뷰 등록

  • reviewSaveBtn을 클릭하면 회원의 아이디(mid), 점수(grade), 내용(text)을 JSON 데이터로 만들어서 전송.

 

7. 리뷰 리스트 보여주기

 

8. 특정 리뷰 선택하기

 

9. 영화 포스터 원본 보기

  • 화면에서 썸네일이 포함된 <li>를 클릭하면 data-file 속성값을 가져와서 imageModal창에 이미지 태그로 추가함.
  • 이때 size 파라미터값을 이용해서 원본 이미지를 가져오게함.
$(".uploadResult li").click(function() {

    var file = $(this).data('file');

    console.log(file);

    $('.imageModal .modal-body').html("<img style='width:100%' src='/display?fileName="+file+"&size=1' >")

    $(".imageModal").modal("show");

});

반응형
profile

my code archive

@얼레벌레 개발자👩‍💻

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

반응형