초록꼬마의 devlog
Published 2023. 8. 20. 01:33
[스프링부트] Ajax back-end dev/framework
<code />
package com.shop.controller; import com.shop.dto.CartItemDto; import com.shop.service.CartService; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.validation.BindingResult; import org.springframework.validation.FieldError; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.ResponseBody; import jakarta.validation.Valid; import java.security.Principal; import java.util.List; import com.shop.dto.CartDetailDto; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PatchMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.DeleteMapping; import com.shop.dto.CartOrderDto; @Controller @RequiredArgsConstructor public class CartController { private final CartService cartService; /** * * @param cartItemDto 장바구니에 담을 상품 정보를 받음 * @param bindingResult * @param principal * @return */ @PostMapping(value = "/cart") public @ResponseBody ResponseEntity order(@RequestBody @Valid CartItemDto cartItemDto, BindingResult bindingResult, Principal principal) { // cartItemDto 객체에 데이터 바인딩 시 에러가 있는지 검사 if (bindingResult.hasErrors()) { StringBuilder sb = new StringBuilder(); List<FieldError> fieldErrors = bindingResult.getFieldErrors(); for (FieldError fieldError : fieldErrors) { sb.append(fieldError.getDefaultMessage()); } return new ResponseEntity<String>(sb.toString(), HttpStatus.BAD_REQUEST); } String email = principal.getName(); // 현재 로그인한 회원의 이메일 정보 Long cartItemId; try { cartItemId = cartService.addCart(cartItemDto, email); } catch (Exception e) { return new ResponseEntity<String>(e.getMessage(), HttpStatus.BAD_REQUEST); } return new ResponseEntity<Long>(cartItemId, HttpStatus.OK); } @GetMapping(value = "/cart") public String orderHist(Principal principal, Model model) { List<CartDetailDto> cartDetailList = cartService.getCartList(principal.getName()); model.addAttribute("cartItems", cartDetailList); return "cart/cartList"; } @PatchMapping(value = "/cartItem/{cartItemId}") // 자원의 일부 update 시 사용하는 HTTP 메서드 <- 장바구니 상품 수량만 update하고자 함 public @ResponseBody ResponseEntity updateCartItem(@PathVariable("cartItemId") Long cartItemId, int count, Principal principal) { if (count <= 0) { return new ResponseEntity<String>("최소 1개 이상 담아주세요", HttpStatus.BAD_REQUEST); } else if (!cartService.validateCartItem(cartItemId, principal.getName())) { // 수정 권한 체크 return new ResponseEntity<String>("수정 권한이 없습니다.", HttpStatus.FORBIDDEN); } cartService.updateCartItemCount(cartItemId, count); // 장바구니 상품의 개수 업데이트 return new ResponseEntity<Long>(cartItemId, HttpStatus.OK); } @DeleteMapping(value = "/cartItem/{cartItemId}") // 요청된 자원 삭제 시 사용하는 HTTP 메서드 <- 장바구니 상품 삭제 public @ResponseBody ResponseEntity deleteCartItem(@PathVariable("cartItemId") Long cartItemId, Principal principal) { if (!cartService.validateCartItem(cartItemId, principal.getName())) { return new ResponseEntity<String>("수정 권한이 없습니다.", HttpStatus.FORBIDDEN); } cartService.deleteCartItem(cartItemId); return new ResponseEntity<Long>(cartItemId, HttpStatus.OK); } @PostMapping(value = "/cart/orders") public @ResponseBody ResponseEntity orderCartItem(@RequestBody CartOrderDto cartOrderDto, Principal principal) { List<CartOrderDto> cartOrderDtoList = cartOrderDto.getCartOrderDtoList(); if (cartOrderDtoList == null || cartOrderDtoList.size() == 0) { return new ResponseEntity<String>("주문할 상품을 선택해주세요", HttpStatus.FORBIDDEN); } for (CartOrderDto cartOrder : cartOrderDtoList) { if (!cartService.validateCartItem(cartOrder.getCartItemId(), principal.getName())) { return new ResponseEntity<String>("주문 권한이 없습니다.", HttpStatus.FORBIDDEN); } } Long orderId = cartService.orderCartItem(cartOrderDtoList, principal.getName()); // 주문 로직 호출 결과 = 처리 결과 생성된 주문 번호 return new ResponseEntity<Long>(orderId, HttpStatus.OK); } }

1. 안녕하세요

1.1. 반가워요!

1.1.1. 저는 초록꼬마에요