public HashMap<String, Object> getCurrentOrders(int storeId) {
// 전체 오더 리스트
List<Order> orderList = orderRepository.findOrdersByStoreId(storeId)
.orElseThrow();
List<StoreResponse.CurrentOrderDTO> currentOrderDTOList = new ArrayList<>();
orderList.stream().map(order -> {
return currentOrderDTOList.add(StoreResponse.CurrentOrderDTO.builder()
.order(order)
.menuList(order.getOrderMenus())
.build());
}).toList();
// 주문 상태별 오더 리스트
List<StoreResponse.CurrentOrderDTO> pendingOrderList = new ArrayList<>();
List<StoreResponse.CurrentOrderDTO> cookingOrderList = new ArrayList<>();
for (int i = 0; i < currentOrderDTOList.size(); i++) {
if (currentOrderDTOList.get(i).getStatus() == OrderStatus.접수대기) {
pendingOrderList.add(currentOrderDTOList.get(i));
}
if (currentOrderDTOList.get(i).getStatus() == OrderStatus.조리중) {
cookingOrderList.add(currentOrderDTOList.get(i));
}
}
HashMap<String, Object> orderFilteredByStatus = new HashMap<>();
orderFilteredByStatus.put("pendingOrderList", pendingOrderList);
orderFilteredByStatus.put("cookingOrderList", cookingOrderList);
return orderFilteredByStatus;
}
StoreOwnerController
@GetMapping("/stores/{storeId}/orders") // TODO: 매장 관리자 - 현재 접수된 주문
private String orders(@PathVariable int storeId, Model model) { // index
/*
// TODO: 권한 처리
SessionStore sessionStore = (SessionStore) session.getAttribute("sessionStore");
if (sessionStore != null) {
return "orders";
} else {
return "login-form";
}
*/
HashMap<String, Object> currentOrderListDTO = storeService.getCurrentOrders(storeId);
model.addAttribute("orderList", currentOrderListDTO);
System.out.println(currentOrderListDTO);
return "orders";
}
✔️ 주문 상태 변경
주문 접수하기, 조리 완료 버튼을 누르면 상태가 변경되고 화면에 반영됨
⚒️ 성재의 코드를 바탕으로 if문으로 분기처리 하는 것을 추가함
@Transactional // TODO: 매장 관리자 - 주문 업데이트
public StoreResponse.UpdateOrderDTO updateOrder(int orderId, StoreRequest.UpdateOrderDTO reqDTO) {
Order order = orderRepository.findById(orderId)
.orElseThrow(() -> new Exception404("주문이 없습니다."));
if (reqDTO.getStatus().equals(OrderStatus.접수대기)) {
order.setStatus(OrderStatus.조리중);
}
if (reqDTO.getStatus().equals(OrderStatus.조리중)) {
order.setStatus(OrderStatus.조리완료);
}
if (reqDTO.getStatus().equals(OrderStatus.조리완료)) {
order.setStatus(OrderStatus.수령완료);
}
StoreResponse.UpdateOrderDTO respDTO = new StoreResponse.UpdateOrderDTO(order);
return respDTO;
}
🐯 화면 랜더링
orders.mustache
주문 상태별 리스트 화면 랜더링: {{#orderList.pendingOrderList}} {{/orderList.pendingOrderList}}, {{#orderList.cookingOrderList}} {{/orderList.cookingOrderList}}에 각각 다른 디자인의 레이아웃을 담고 상태별 리스트를 랜더링한다.
주문 상태 변경: form 태그 안에 를 심어서 버튼을 누르면 그 상태를 post할 수 있게 한다.
🐯 머스태치는 마지막에 한 번에 볼 수 있게 되어있음
✔️ 주문 상태별 리스트 화면 랜더링
StoreService
두 개의 리스트를 HashMap에 담아서 리턴한다.
StoreOwnerController
✔️ 주문 상태 변경
주문 접수하기, 조리 완료 버튼을 누르면 상태가 변경되고 화면에 반영됨
⚒️ 성재의 코드를 바탕으로 if문으로 분기처리 하는 것을 추가함
🐯 화면 랜더링
orders.mustache