-
웹 계층 개발 - 상품 주문과 주문 내역JPA/JPA 활용 2023. 7. 11. 18:13
OrderController
@Controller @RequiredArgsConstructor public class OrderController{ private final OrderService orderService; private final MemberService memberService; private final ItemService itemService; @GetMapping("/order") public String createForm(Model model) { List<Member> members = memberService.findMembers(); List<Item> items = itemService.findItems(); model.addAttribute("members", members); model.addAttribute("items", items); return "order/orderForm"; } @PostMapping("/order") public String order(@RequestParam("memberId") Long memberId, @RequestParam("itemId") Long itemId, @RequestParam("count") int count) { orderService.order(memberId, itemId, count); // 조회가 아닌 핵심 비즈니스로직은 바깥에서 entity를 넘기기 보다는 // 식별자만 넘기고 service 계층 등에서 해야지 영속상태에서 조회 가능 return "redirect:/orders"; }
주문을 할 때에 멤버와 상품을 선택해서 주문을 하는 방식이다. 따라서 member와 item의 리스트를 모델에 넘겨주고 그 html을 return 받아야한다.
회원과 상품 명은 버튼을 누르면 선택을 할 수 있도록 리스트가 나오고, 주문 수량은 빈칸에다 숫자를 적는 방식이다.
이후에 PostMapping 방식으로 orderService.order 로직이 불려오면서 db에 주문이 저장되고 주문목록으로 리다이렉트를 한다.
주문 목록과 취소버튼
@GetMapping("/orders") public String orderList(@ModelAttribute("orderSearch") OrderSearch orderSearch, Model model) { List<Order> orders = orderService.findOrders(orderSearch); model.addAttribute("orders", orders); return "order/orderList"; } @PostMapping("orders/{orderId}/cancel") public String cancelOrder(@PathVariable("orderId") Long orderId) { orderService.cancelOrder(orderId); return "redirect:/orders"; }
우선 주문목록은 order의 list를 받아와서 model에 넘겨준 뒤, orderList.html에서 사용자에게 view로 보여주면 된다.
cancel 기능은 orderService에 있는 cancelOrder기능을 사용했다.
orderList.html에서 상태가 ORDER일 때에만 CANCEL 버튼이 보이도록 했고, CANCEL 버튼을 누르면 cancelOrder 로직이 불려옴과 동시에 주문목록으로 리다이렉트 된다.
'JPA > JPA 활용' 카테고리의 다른 글
회원 수정 API (0) 2023.07.11 회원 등록 API (0) 2023.07.11 변경 감지와 병합(merge) (0) 2023.07.11 웹 계층 개발 - 상품 수정 (0) 2023.07.11 웹 계층 개발 - 상품 등록, 목록 조회 (0) 2023.07.11