@GetMapping("/product/order")
public String order(@RequestParam("cartNo") List<Integer> cartNos,
Model model) {
List<CartDTO> cartDTOList = new ArrayList<>();
for (int i = 0; i < cartNos.size(); i++) {
Integer cartNo = cartNos.get(i);
CartDTO cartDTO = productOrderService.findByCartNo(cartNo);
cartDTOList.add(cartDTO);
}
String uid = cartDTOList.get(0).getUser().getUid();
UserDetailsDTO userDetailsDTO = productOrderService.findByUser(uid);
List<CouponIssueDTO> couponIssueDTOList = productOrderService.findAllByUser(uid);
model.addAttribute(cartDTOList);
model.addAttribute(couponIssueDTOList);
model.addAttribute(userDetailsDTO);
return "/product/order/order";
}
기술 설명
- @GetMapping("/product/order"): GET 요청을
/product/order경로로 매핑.- @RequestParam("cartNo") List cartNos: 요청 파라미터
cartNo를 리스트 형태로 바인딩(예:?cartNo=1&cartNo=2).- List cartDTOList = new ArrayList<>(): 선택된 각
cartNo에 대해CartDTO를 담을 리스트 초기화.- for (Integer cartNo : cartNos): 전달된 장바구니 번호 목록을 순회하며
- productOrderService.findByCartNo(cartNo): 해당
cartNo의 장바구니 정보를 조회하여CartDTO반환.- cartDTOList.add(cartDTO): 조회된
CartDTO를 리스트에 추가.- String uid = cartDTOList.get(0).getUser().getUid(): 첫 번째
CartDTO의 사용자 ID(uid)를 가져옴.- productOrderService.findByUser(uid): 사용자 정보(
UserDetailsDTO) 조회.- productOrderService.findAllByUser(uid): 해당 사용자가 보유한 쿠폰 발급 이력(
List<CouponIssueDTO>) 조회.- model.addAttribute(cartDTOList): 뷰에
cartDTOList전달(장바구니 항목 목록).- model.addAttribute("couponIssueDTOList", couponIssueDTOList): 조회된 쿠폰 리스트를
"couponIssueDTOList"라는 이름으로 뷰에 전달.- model.addAttribute("userDetailsDTO", userDetailsDTO): 사용자 정보 DTO를
"userDetailsDTO"로 뷰에 전달.- return "/product/order/order":
order.html템플릿을 렌더링하여 주문 화면으로 이동.
@PostMapping("/product/order/direct")
public String order(@RequestParam Map<String, String> options,
ItemRequestDTO itemRequestDTO,
@AuthenticationPrincipal UserDetails userDetails,
HttpSession session,
Model model) {
List<CartDTO> cartDTOList = productOrderService.makeCart(itemRequestDTO, userDetails, options);
String uid = userDetails.getUsername();
UserDetailsDTO userDetailsDTO = productOrderService.findByUser(uid);
List<CouponIssueDTO> couponIssueDTOList = productOrderService.findAllByUser(uid);
model.addAttribute(cartDTOList);
model.addAttribute(couponIssueDTOList);
model.addAttribute(userDetailsDTO);
session.setAttribute("cartDTO", cartDTOList.get(0));
return "/product/order/order";
}
기술 설명
- @PostMapping("/product/order/direct"): POST 요청을
/product/order/direct경로로 매핑.- @RequestParam Map<String, String> options: 요청 파라미터 전체를 키-값 쌍 맵으로 바인딩하여 옵션 정보 수집.
- ItemRequestDTO itemRequestDTO: 요청 바디 또는 파라미터로 전달된 바로 구매 상품 정보(상품 번호, 수량 등)를 캡슐화한 DTO.
- @AuthenticationPrincipal UserDetails userDetails: 현재 로그인된 사용자 정보를
UserDetails로 주입.- HttpSession session: 세션 객체를 통해 서버 측에 세션 데이터를 저장하거나 조회.
- productOrderService.makeCart(itemRequestDTO, userDetails, options): 바로 구매를 위해
ItemRequestDTO, 사용자 정보, 옵션 맵을 넘겨주어 내부적으로CartDTO리스트 생성.- String uid = userDetails.getUsername(): 로그인된 사용자의 ID(
uid)를 획득.- productOrderService.findByUser(uid): 사용자 정보(
UserDetailsDTO) 조회.- productOrderService.findAllByUser(uid): 해당 사용자가 보유한 쿠폰 발급 이력(
List<CouponIssueDTO>) 조회.- model.addAttribute(cartDTOList): 생성된
cartDTOList를 뷰에 전달(바로 구매용 장바구니 항목 목록).- model.addAttribute("couponIssueDTOList", couponIssueDTOList): 쿠폰 리스트를
"couponIssueDTOList"로 뷰에 전달.- model.addAttribute("userDetailsDTO", userDetailsDTO): 사용자 정보를
"userDetailsDTO"로 뷰에 전달.- session.setAttribute("cartDTO", cartDTOList.get(0)): 첫 번째
CartDTO를 세션 속성"cartDTO"로 저장하여 결제 완료 이후에도 참조 가능하도록 설정.- return "/product/order/order":
order.html템플릿을 렌더링하여 주문 화면으로 이동.