목록Spring/SpringShop (21)
코드 그라데이션
@DeleteMapping(value = "/cartItem/{cartItemId}") public @ResponseBody ResponseEntity deleteCartItem(@PathVariable("cartItemId") Long cartItemId, Principal principal){ if (!cartService.validateCartItem(cartItemId, principal.getName())) { return new ResponseEntity("수정권한이 없습니다.", HttpStatus.FORBIDDEN); } cartService.deleteCartItem(cartItemId); return new ResponseEntity(cartItemId, HttpStatus.OK); 그..
@PostMapping(value = "/cart/orders") public @ResponseBody ResponseEntity orderCartItem(@RequestBody CartOrderDto cartOrderDto, Principal principal){ System.out.println(cartOrderDto.getCartItemId()); List cartOrderDtoList = cartOrderDto.getCartOrderDtoList(); if(cartOrderDtoList == null || cartOrderDtoList.size() == 0){ // 카트 주문 상품이 없으면 실행 return new ResponseEntity("주문할 상품을 선택해주세요.",HttpStatus.FO..
장바구니 담는 로직 public Long addCart(CartItemDto cartItemDto, String email){ Item item = itemRepository.findById(cartItemDto.getItemId()) .orElseThrow(EntityExistsException::new); // 상품 추출 Member member = memberRepository.findByEmail(email); // 로그인된 사용자 추출 Cart cart = cartRepository.findByMemberId(member.getId()); // 카트 추출 if(cart == null){ // 카트가 Null이면 -> 신규가입자 cart = Cart.createCart(member); // 카트생..
Order에 orderId에 cancel로 이루어진다. 주문취소는 아무나 하면 안 되기 때문에 권한에 대한 판단이 필요 order에는 member를 식별할 수 있는 외래키를 가지고 있다*(email) 취소 : order -> cancel / orderItem -> cancel / addStock() 한 번 실행(주문 시 차감되었을 것이므로 수량 복구 차원) 자바스크립트 코드까지 고려해서 보면 이렇게 된다. 구조도로 정리하면
주문 이력 조회하기 @GetMapping(value = {"/orders", "/orders/{page}"}) public String orderHist(@PathVariable("page") Optional page, Principal principal, Model model){ Pageable pageable = PageRequest.of(page.isPresent() ? page.get() : 0, 5); Page orderHistDtoList = orderService.getOrderList(principal.getName(), pageable); model.addAttribute("orders", orderHistDtoList); model.addAttribute("page", pageable...
주문 기능 구현 ItemService @Transactional(readOnly = true) public Page getMainItemPage(ItemSearchDto itemSearchDto, Pageable pageable){ return itemRepository.getMainItemPage(itemSearchDto, pageable); } ItemRepositoryCustom public interface ItemRepositoryCustom { Page getAdminItemPage(ItemSearchDto itemSearchDto, Pageable pageable); Page getMainItemPage(ItemSearchDto itemSearchDto, Pageable pageable); ..
상세페이지는 Item 하나만 보여주면 되는 것이니까 여러개 들고 올 필요 없이 ItemService @Transactional(readOnly = true) public ItemFormDto getItemDtl(Long itemId){ List itemImgList = itemImgRepository.findByItemIdOrderByIdAsc(itemId); // DB에서 데이터를 가지고 옵니다. List itemImgDtoList = new ArrayList(); for (ItemImg itemImg : itemImgList) { ItemImgDto itemImgDto = ItemImgDto.of(itemImg); itemImgDtoList.add(itemImgDto); } Item item = it..
메인 페이지 만들기 ItemController 기존에는 메인으로만 돌아가는 역할을 했다면, 지금은 무언가를 연결해서 보여주는 로직으로 변모 @Controller @RequiredArgsConstructor public class MainController { private final ItemService itemService; @GetMapping(value = "/") public String main(ItemSearchDto itemSearchDto, Optional page, Model model) { Pageable pageable = PageRequest.of(page.isPresent() ? page.get() : 0, 5); if (itemSearchDto.getSearchQuery() ==..
ItemController @GetMapping(value = {"/admin/items", "/admin/items/{page}"}) public String itemManage(ItemSearchDto itemSearchDto, @PathVariable("page") Optional page, Model model){ Pageable pageable = PageRequest.of(page.isPresent() ? page.get() : 0, 5); Page items = itemService.getAdminItemPage(itemSearchDto, pageable); model.addAttribute("items", items); model.addAttribute("itemSearchDto", ite..
ItemRepositoryCustom 이 부분인데 //리포지토리 특이한 상속!!! -- 궁금... // 형제쪽에 드러나 있는 애가 있고 숨겨진 애가 있다. // 형제끼리는 원래 형변환이 되지 않는다. (Impl이라서 가능) @Transactional(readOnly = true) public Page getAdminItemPage(ItemSearchDto itemSearchDto, Pageable pageable) { return itemRepository.getAdminItemPage(itemSearchDto, pageable); } // 원래 itemRepository.getAdminItemPage는 죽어야 하는데, 다른 자식이 구현하고 있으므로 사용 가능. // 스프링이 해주는 특이한 형태. /* ..