드디어 구매자 장바구니 구현까지 끝냈다!!!!!!!
장바구니를 구현하였으면 장바구니를 통해 주문을 하고 그 주문을 관리하도록하여야한다!!!
따라서 이번에는 주문을 구현해보도록 하겠다..
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
@Entity
@Table(name="orders")
public class Order {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id; // order_id
private String status; // 상황
private int price; // 총 금액
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "user_id")
private User user;
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private List<Order_item> order_items = new ArrayList<>();
@DateTimeFormat(pattern = "yyyy-MM-dd hh:mm:ss")
private LocalDateTime createDate; // 날짜
public void addOrderItem(Order_item order_item){
order_items.add(order_item);
order_item.setOrder(this);
}
public static Order createOrder(User user, List<Order_item> orderItemList){
Order order = new Order();
order.setUser(user);
for(Order_item order_item : orderItemList){
order.addOrderItem(order_item);
}
order.setStatus("주문 완료");
order.setCreateDate(LocalDateTime.now());
return order;
}
public int getTotalPrice(){
int totalPrice = 0;
for(Order_item order_item : order_items){
totalPrice += (order_item.getPrice() * order_item.getCount());
}
return totalPrice;
}
}
주문
public interface OrderRepository extends JpaRepository<Order,Integer> {
Order findByUserId(int userId);
}
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
@Entity
public class Order_item {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id; // Order_item_id
private int count; // 개수
private int price; // 금액
@ManyToOne(fetch = FetchType.EAGER,cascade = CascadeType.ALL)
@JoinColumn(name = "order_id")
private Order order; // 주문 연결
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "item_id")
private Item item; // 아이템 연결
public static Order_item createOrderItem(Item item, int count){
Order_item order_item = new Order_item();
order_item.setItem(item);
order_item.setCount(count);
order_item.setPrice(item.getPrice());
return order_item;
}
}
public interface Order_itemRepository extends JpaRepository<Order_item,Integer> {
}
주문의 기능은 다음과 같다.
public void createOrder(User user){
Order order = new Order();
order.setUser(user);
orderRepository.save(order);
}
public void order(User user, List<Cart_item> cart_items){
List<Order_item> order_items = new ArrayList<>(); // 주문내역에 추가할 아이템리스트
for(Cart_item cart_item : cart_items){
Order_item order_item = Order_item.createOrderItem(cart_item.getItem(),cart_item.getCount());
order_items.add(order_item);
}
Order order = Order.createOrder(user,order_items);
order.setPrice(order.getTotalPrice());
orderRepository.save(order);
}
public List<Order> orderList(){
return orderRepository.findAll();
}
public Order orderView(Integer id){
return orderRepository.findById(id).get();
}
public void orderUpdate(Integer id, Order order){
Order tempOrder = orderRepository.findById(id).get();
tempOrder.setStatus(order.getStatus());
orderRepository.save(tempOrder);
}
주문 또한 User의 기능중 하나이므로 UserPageController 에 추가하였다.
@Transactional
@GetMapping("/user/{id}/order")
public String myOrderPage(@PathVariable("id") Integer id,Model model,@AuthenticationPrincipal PrincipalDetails principalDetails){
// 로그인 User == 접속 User
if(principalDetails.getUser().getId() == id){
// User의 주문내역을 가져온다.
User user = userPageService.findUser(id);
List<Order> orderList = user.getOrders();
model.addAttribute("orderList",orderList);
model.addAttribute("user",user);
return "/user/order";
}else{
return "redirect:/main";
}
}
주문을 하게되면 다음과 같이 주문한 날짜와 주문내용의 상태를 볼수있다.
구매자의 주문기능을 구현하였다!!!!
이제 해야할 일은 무엇인가?? 당연히 구매자의 주문을 판매자가 처리하는 기능을 구현하여야한다.
따라서 다음 시간에는 판매자의 판매내역을 구현하도록 하겠다 ><