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)에 저장한다.
만약 책이 존재하지 않거나, 이미 들어가있을 경우 예외를 터트린다.
찜 목록에 잘 저장되면 성공!