/**
* 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("상품이 존재하지 않습니다. 다시 한 번 확인해주세요.");
}
}