상품 등록
- 상품 등록 폼
@Getter @Setter
public class BookForm {
private Long id;
private String name;
private int price;
private int stockQuantity;
private String author;
private String isbn;
}
- 상품 등록 컨트롤러
@Controller
@RequiredArgsConstructor
public class ItemController {
private final ItemService itemService;
//상품등록 화면 띄우기
@GetMapping("/items/new")
public String createForm(Model model){
model.addAttribute("form", new BookForm());
return "items/createItemForm";
}
//상품 등록 정보 가져오기
@PostMapping("/items/new")
public String create(BookForm form){
Book book = new Book();
book.setName(form.getName());
book.setPrice(form.getPrice());
book.setStockQuantity(form.getStockQuantity());
book.setAuthor(form.getAuthor());
book.setIsbn(form.getIsbn());
//setter를 제거하는게 좋은 설계이다.
itemService.saveItem(book);
return "redirect:/items";
}
}
setter를 모두 제거하는 것이 좋은 설계다. createBook같은 것을 만들고 파라미터로 받아오자!!
상품 목록
@GetMapping("/items")
public String list(Model model){
List<Item> items = itemService.findItems();
model.addAttribute("items", items);
return "items/itemList";
}
//상품 목록은 리스트로 받아오자
상품 수정
@GetMapping("items/{itemId}/edit")
public String updateItemForm(@PathVariable("itemId") Long itemId, Model model){
Book item = (Book) itemService.findOne(itemId);
BookForm form = new BookForm();
form.setId(item.getId());
form.setName(item.getName());
form.setPrice(item.getPrice());
form.setStockQuantity(item.getStockQuantity());
form.setAuthor(item.getAuthor());
form.setIsbn(item.getIsbn());
model.addAttribute("form",form);
return "items/updateItemForm";
}
@PostMapping("items/{itemId}/edit")
public String updateItem(@PathVariable String itemId, @ModelAttribute("form") BookForm form){
Book book = new Book();
book.setId(form.getId());
book.setName(form.getName());
book.setPrice(form.getPrice());
book.setStockQuantity(form.getStockQuantity());
book.setAuthor(form.getAuthor());
book.setIsbn(form.getIsbn());
itemService.saveItem(book);
return "redirect:/items";
}
첫번째 get은 변경할 요소의 사항들을 가져온뒤 updateItemForm으로 간다. 그 곳에는 현재 요소들의 내용이 들어가 있다. 두번째 post는 변경할 요소들을 Book으로 만든 뒤 set으로 설정한다. 그 후에 itemService.saveItem을 통해 책을 save한다.
상품 주문
- 상품 주문 컨트롤러
@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);
return "redirect:/orders";
}
}
- GetMapping은 주문 폼 이동이다. 상품을 주문하면 /order를 get 방식으로 호출하고 OrderController의 createForm()매서드가 실행 된다. 그러면 주문 화면에서는 주문할 고객정보와 상품 정보가 필요하므로 model 객체에 담아서 뷰에 넘겨준다.
- PostMapping은 주문 실행이다. 주문할 회원과 상품 그리고 수량을 선택해서 Submit을 하면 Post 방식으로 order() 매서드를 실행한다.
파라미터를 넘겨서 생성하고 저장하는 방법이 좋다.
주문 목록 검색, 취소
- 주문 목록 검색 컨트롤러
@GetMapping(value = "/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";
}
취소가 되면 status가 cancel로 바뀌고 재고도 2개가 추가된다.
강의 출저
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발 - 인프런 | 강의
실무에 가까운 예제로, 스프링 부트와 JPA를 활용해서 웹 애플리케이션을 설계하고 개발합니다. 이 과정을 통해 스프링 부트와 JPA를 실무에서 어떻게 활용해야 하는지 이해할 수 있습니다., - 강
www.inflearn.com
'BackEnd > 실전! 스프링 부트와 JPA 활용1' 카테고리의 다른 글
변경 감지와 병합(merge) (1) | 2023.01.06 |
---|---|
웹 계층 개발(회원) (0) | 2023.01.06 |
주문 도메인 개발 (0) | 2023.01.05 |
상품 도메인 개발 (0) | 2023.01.04 |
회원 도메인 개발 (0) | 2023.01.04 |