[BOOK 개인프로젝트] 9. 찜 목록 -> 상품 주문하기, 찜 상품 삭제

이재민·2024년 6월 3일
0

JPA 

목록 보기
11/21

찜 목록 화면

상품 주문하기

    /**
     * from wishlist to orderBook-> isbn으로 책 db 저장 후 redirect
     */
    @GetMapping("/saveWishlistToOrderBookRepository")
    public String saveWishlistToOrderBookRepository(@RequestParam("isbn") String isbn) throws Exception {
        log.info("saveWishlistToOrderBookRepository");
        try {
            wishlistService.saveWishlistToOrderBookAndDeleteWishlist(isbn);
            return "redirect:/home";
        } catch (DuplicateOrderException e) {
            log.error("중복 주문이 발생하였습니다.");
            throw new DuplicateOrderException("중복 주문이 발생하였습니다.");
        } catch (Exception e) {
            log.error("처리 중 오류가 발생하였습니다.");
            throw new Exception("처리 중 오류가 발생하였습니다.");
        }
    }

"saveWishlistToOrderBookAndDeleteWishlist" 메서드를 통해 찜 목록에서 상품을 삭제하면서 동시에 주문하기 페이지에서 상품을 저장해줌

    @Transactional
    public void saveWishlistToOrderBookAndDeleteWishlist(String isbn) {
        Wishlist wishlist = getWishlistByIsbn(isbn);
        checkIfOrderBookAlreadyExists(wishlist.getIsbn());
        OrderBook orderBookbyWishlist = getOrderBookbyWishlist(wishlist);
        saveOrderBook(orderBookbyWishlist);
        deleteWishlist(isbn);
    }

    //wishlist.isbn을 통해 해당 상품이 이미 주문하기 화면에 존재하는지 확인하는 메서드
    private void checkIfOrderBookAlreadyExists(String isbn) {
        OrderBook orderBookbyIsbn = orderBookRepository.findByIsbn(isbn);
        if (orderBookbyIsbn != null) {
            throw new DuplicateOrderException("이미 주문하기 화면에 해당 상품이 존재합니다.");
        }
    }

    //wishlist 추출 후 값 있는지 확인 하는 검증 메서드
    private Wishlist getWishlistByIsbn(String isbn) {
        Wishlist wishlist = wishlistRepository.findByIsbn(isbn);
        if (wishlist == null) {
            throw new IllegalStateException("해당 isbn에 해당하는 책이 존재하지 않습니다.");
        }
        return wishlist;
    }

먼저 isbn을 통해 wishlist를 가져온 후 이미 주문하기 화면에 존재하는지 한 번 확인 한 뒤에 없으면 상품을 저장하고 wishlist db에 있는 값을 삭제해줌

찜 상품 삭제

WishlistController

    @GetMapping("/delete_wishlist")
    public String delete_wishlist(@RequestParam("isbn") String isbn) {
        wishlistService.deleteWishlist(isbn);
        return "redirect:/home";
    }

WishlistService

    @Transactional
    public void deleteWishlist(String isbn) {
        Wishlist wishlist = wishlistRepository.findByIsbn(isbn);
        if (wishlist != null) {
            wishlistRepository.delete(wishlist);
        } else {
            throw new EntityNotFoundException("상품이 존재하지 않습니다. 다시 한 번 확인해주세요.");
        }
    }
profile
복학생의 개발 일기

0개의 댓글

관련 채용 정보