[BOOK 개인프로젝트] 7. 검색 목록 -> 장바구니 추가, 상품 주문, 찜 목록에 추가

이재민·2024년 6월 3일
0

JPA 

목록 보기
9/21
post-thumbnail

현재 bookList 화면

장바구니 추가

Booklist.html

<!-- 장바구니에 추가 버튼 -->
<form id = "BookListForm1" action="/home/basket" method="GET">
<button id="BookListButton1" class="btn btn-primary btn-sm btn-fixed-width" style="margin-right: 10px; background-color: #7013F2; border-color: #7013F2; color: white;">장바구니 추가</button>
<input type="hidden" id="BookListId1" name="isbn" th:value="${book.isbn}">
</form>

BasketController

    // isbn을 통해 찾은 book을 db에 저장 (
    @GetMapping("/home/basket")
    public String addToBasket(@RequestParam("isbn") String isbn) throws Exception {

        log.info("BasketController 실행합니다");

        log.info("장바구니에 상품 추가 요청을 받았습니다. ISBN: {}", isbn);

        // 네이버 책 검색 API를 통해 해당 ISBN에 해당하는 책 추출
        Book book = naverApiService.searchBookByIsbn(isbn);

        if (book.getTitle() == null || book.getIsbn() == null) {
            // 유효성 검사 실패 시 적절한 응답 반환
            log.error("북 이름, isbn이 필요합니다.");
            throw new Exception("북 이름, isbn 값이 필요합니다");
        }

        try {
            log.info("책 정보를 db에 저장합니다.");
            //책 정보를 db에 저장
            bookService.saveBook(book);

            // 적절한 응답 반환
            return "redirect:/home";

        } catch (DuplicateIsbnException e) {
            // 중복된 ISBN이 발생한 경우 적절한 응답 반환
            log.error("중복된 ISBN이 발생했습니다: {}", e.getMessage());
            throw new DuplicateIsbnException("해당 책이 이미 장바구니에 존재합니다.");

        } catch (Exception e) {
            // 저장 중에 예외가 발생한 경우 적절한 응답 반환
            log.error("저장 중 예외가 발생하였습니다.");
            throw new Exception("예상치 못한 예외가 발생했습니다 다시 시도해주세요.");
        }
    }

네이버 검색 api를 통해 해당 isbn에 해당하는 책을 가져온 뒤 존재하면 장바구니 db에 저장하고, 없거나 이미 저장되어 있는 경우 예외를 터트린다.

잘 들어갔으면 성공!

상품 주문


<!-- 상품 주문 버튼-->
<form id = "BookListForm2" action="/BooklistToOrderBook" method="GET">
<button id="BookListButton2" class="btn btn-primary btn-sm btn-fixed-width" style="margin-right: 10px; background-color: #F26B6B; border-color: #F26B6B; color: white;">상품 주문 하기</button>
<input type="hidden" id="BookListId2" name="isbn" th:value="${book.isbn}">
</form>

BookListController

    @GetMapping("/BooklistToOrderBook")
    public String BooklistToOrderBook(@RequestParam("isbn") String isbn) throws Exception {
        //basket -> orderBook 바로 상품 주문하기 메서드

        log.info("BooklistToOrderBook 메서드 실행");

        log.info("Booklist 상품 주문하기 버튼 클릭. ISBN: {}", isbn);

        //isbn으로 Json 객체 -> book 객체로 convert
        Book book = naverApiService.searchBookByIsbn(isbn);

        if (book.getTitle() == null || book.getIsbn() == null) {
            // 유효성 검사 실패 시 적절한 응답 반환
            log.error("북 이름, isbn이 필요합니다.");
            throw new Exception("북 이름, isbn 값이 필요합니다");
        }

        try {
            log.info("Booklist -> orderBook");
            //책 정보를 db에 저장
            OrderBook orderBook = orderBookService.getOrderBook(book);
            orderBookService.saveOrderBook(orderBook);

            // 적절한 응답 반환
            return "redirect:/home";

        } catch (DuplicateOrderException e) {
            // 중복된 주문이 발생한 경우 적절한 응답 반환
            log.error("중복된 주문이 발생하였습니다: {}", e.getMessage());
            throw new DuplicateOrderException("중복된 주문이 발생하였습니다.");

        } catch (Exception e) {
            // 저장 중에 예외가 발생한 경우 적절한 응답 반환
            log.error("저장 중 예외가 발생하였습니다.");
            throw new Exception("저장 중 예외가 발생하였습니다. 다시 한 번 확인해주세요.", e);
        }
    }

책이 존재하면 orderBook 객체로 변환 후 orderBook(주문하기) db에 저장
존재하지 않거나, 중복 저장이면 -> 예외 터트림

상품이 잘 들어갔으면 성공!

찜 목록에 추가

Booklist.html

 <!-- 찜 목록 추가 버튼 -->
<form id = "BookListForm3" action="/savedBookinWishlist" method="GET">
<button id="BookListButton3" class="btn btn-primary btn-sm btn-fixed-width" style="margin-right: 10px; background-color: #3F88C5; border-color: #3F88C5; color: white;">찜 목록에 추가</button>
<input type="hidden" id="BookListId3" name="isbn" th:value="${book.isbn}">
</form>

WishlistController

   @GetMapping("/savedBookinWishlist")
    public String addToWishlist(@RequestParam("isbn") String isbn) throws Exception {

        //isbn -> 네이버 책 검색 API에 요청 보냄

        log.info("savedBookinWishlist");
        //Json 객체 -> book 객체로 convert
        Book book = naverApiService.searchBookByIsbn(isbn);

        log.info("변환된 Book 객체 : {}", book);

        Wishlist wishlist = WishlistService.convertToEntityWishlistBook(book);

        log.info("변환된 Wishlist 객체 : {}", wishlist);

        if (wishlist.getName() == null || wishlist.getIsbn() == null) {
            // 유효성 검사 실패 시 적절한 응답 반환
            log.error("북 이름, isbn이 필요합니다.");
            throw new Exception("북 이름, isbn 값이 필요합니다");
        }

        try {
            log.info("책 정보를 wishlist db에 저장합니다.");
            //책 정보를 db에 저장
            wishlistService.saveWishlist(wishlist);

            // 적절한 응답 반환
            return "redirect:/home";

        } catch (DuplicateWishlistException e) {
            // 중복된 ISBN이 발생한 경우 적절한 응답 반환
            log.error("이미 찜 목록에 상품이 존재합니다.: {}", e.getMessage());
            throw new DuplicateWishlistException("이미 찜 목록에 상품이 존재합니다.");

        } catch (Exception e) {
            // 저장 중에 예외가 발생한 경우 적절한 응답 반환
            log.error("저장 중 예외가 발생하였습니다.");
            throw new Exception("장바구니에 이미 해당 책이 있습니다.", e);
        }
    }

넘어온 isbn을 토대로 책을 찾고 책이 존재하면 "convertToEntityWishlistBook"를 통해 wishlist 객체로 변환한다. 그리고 값을 wishlist db(찜 목록 db)에 저장한다.
만약 책이 존재하지 않거나, 이미 들어가있을 경우 예외를 터트린다.

찜 목록에 잘 저장되면 성공!

profile
복학생의 개발 일기

0개의 댓글

관련 채용 정보