diff --git a/src/main/java/dev/service/OrderService.java b/src/main/java/dev/service/OrderService.java index 14708f8..508882a 100644 --- a/src/main/java/dev/service/OrderService.java +++ b/src/main/java/dev/service/OrderService.java @@ -1,25 +1,118 @@ package dev.service; +import dev.dao.MenuItemDao; +import dev.dao.OrderDao; +import dev.dao.OrderDetailDao; +import dev.model.MenuItem; +import dev.model.Order; +import dev.model.OrderDetail; + +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; + public class OrderService { + MenuItemDao menuItemDao = new MenuItemDao(); + OrderDetailDao orderDetailDao = new OrderDetailDao(); + OrderDao orderDao = new OrderDao(); + + Scanner in = new Scanner(System.in); + public void placeOrder(int userId) { - // TODO: - // Create order + List details = new ArrayList<>(); + int totalPrice = 0; + // Create order + while (true) { + System.out.println("Enter the id of your order (-1 to exit) : "); + int id = in.nextInt(); + + if(id==-1) break; + + MenuItem menuItem = menuItemDao.findById(id); + + if(menuItem != null) { + + System.out.println("Enter quantity: "); + int quantity = in.nextInt(); + + if(quantity<=0) { + System.out.println("Quantity can't be negative"); + continue; + } + + OrderDetail orderDetail = new OrderDetail(); + + orderDetail.setPrice(menuItem.getPrice()); + orderDetail.setQuantity(quantity); + orderDetail.setMenuItemId(id); + + details.add(orderDetail); + totalPrice += menuItem.getPrice()*quantity; + + System.out.println(quantity+ " " + menuItem.getName() + "(s) got added to your order."); + } + } + + if (totalPrice<=0) return; + + Order order = new Order(); + order.setTotalPrice(totalPrice); + order.setUserId(userId); + int orderId = orderDao.save(order); + + if (orderId == -1) { + System.out.println("Order could not be saved"); + return; + } + + for(OrderDetail orderDetail : details) { + orderDetail.setOrderId(orderId); + orderDetailDao.save(orderDetail); + } + + printReceipt(orderId); } public void printReceipt(int orderId) { - // TODO: // Print order receipt + List details = orderDetailDao.findByOrderId(orderId); + if (details.isEmpty()) return; + + double totalPrice = 0; + + System.out.println("\n===== RECEIPT ====="); + + for (OrderDetail detail : details) { + + MenuItem item = menuItemDao.findById(detail.getMenuItemId()); + + double subtotal = detail.getPrice() * detail.getQuantity(); + totalPrice += subtotal; + + System.out.println( item.getName() + " | Quantity: " + detail.getQuantity() + + " | Price: " + detail.getPrice() + "$ | Total: " + subtotal + "$"); + } + System.out.println("\nFinal Total: $" + totalPrice); } public void showOrderHistory(int userId) { - // TODO: // Display user's order history + List orders = orderDao.findByUserId(userId); + + if (orders.isEmpty()) return; + + System.out.println("\n===== ORDER HISTORY ====="); + + for (Order order : orders) { + System.out.println( "Order #" + order.getId() + " | Date: " + order.getCreatedAt() + + " | Total: " + order.getTotalPrice() + "$"); + } }