From ae5ca58073f5d7cfe37e46a8edecdc3e2529b7ee Mon Sep 17 00:00:00 2001 From: ginks21z Date: Fri, 17 Jul 2026 03:22:25 +0430 Subject: [PATCH] idk --- .idea/.gitignore | 10 ++ .idea/compiler.xml | 13 ++ .idea/encodings.xml | 7 + .idea/jarRepositories.xml | 20 +++ .idea/misc.xml | 12 ++ .idea/vcs.xml | 7 + src/main/java/dev/dao/MenuItemDao.java | 47 +++++- src/main/java/dev/dao/OrderDao.java | 46 +++++- src/main/java/dev/dao/OrderDetailDao.java | 48 +++++- src/main/java/dev/dao/UserDao.java | 47 +++++- .../java/dev/database/DatabaseConnection.java | 7 +- src/main/java/dev/model/MenuItem.java | 27 ++++ src/main/java/dev/model/Order.java | 15 ++ src/main/java/dev/model/OrderDetail.java | 23 +++ src/main/java/dev/model/User.java | 22 +++ src/main/java/dev/service/AuthService.java | 62 +++++++- src/main/java/dev/service/MenuService.java | 21 ++- src/main/java/dev/service/OrderService.java | 144 +++++++++++++++++- src/main/java/dev/ui/ConsoleMenu.java | 73 ++++++++- 19 files changed, 610 insertions(+), 41 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/compiler.xml create mode 100644 .idea/encodings.xml create mode 100644 .idea/jarRepositories.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/vcs.xml diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..ab1f416 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,10 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Ignored default folder with query files +/queries/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..bf2c501 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..aa00ffa --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..4158879 --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..eba6e1f --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..8306744 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/src/main/java/dev/dao/MenuItemDao.java b/src/main/java/dev/dao/MenuItemDao.java index 3bbebe9..95b2d44 100644 --- a/src/main/java/dev/dao/MenuItemDao.java +++ b/src/main/java/dev/dao/MenuItemDao.java @@ -1,23 +1,60 @@ package dev.dao; +import dev.database.DatabaseConnection; import dev.model.MenuItem; +import java.sql.*; +import java.util.ArrayList; import java.util.List; public class MenuItemDao { public List findAll() { + List items = new ArrayList<>(); + String sql = "select * FROM menu_item"; - // TODO: - // Retrieve all menu items + try (Connection connection = DatabaseConnection.getConnection(); + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(sql) + ) { + while (resultSet.next()) { + MenuItem item = new MenuItem( + resultSet.getInt("id"), + resultSet.getString("name"), + resultSet.getString("description"), + resultSet.getDouble("price"), + resultSet.getString("category") + ); + items.add(item); + } + } catch (SQLException e) { + System.err.println("Error fetching menu items: " + e.getMessage()); + } - return null; + return items; } public MenuItem findById(int id) { + String sql = "SELECT * FROM menu_items WHERE id = ?"; - // TODO: - // Find menu item by id + try (Connection conn = DatabaseConnection.getConnection(); + PreparedStatement pstmt = conn.prepareStatement(sql)) { + + pstmt.setInt(1, id); + try (ResultSet rs = pstmt.executeQuery()) { + if (rs.next()) { + return new MenuItem( + rs.getInt("id"), + rs.getString("name"), + rs.getString("description"), + rs.getDouble("price"), + rs.getString("category") + ); + } + } + } catch (SQLException e) { + System.err.println("Error finding menu item: " + e.getMessage()); + } return null; } diff --git a/src/main/java/dev/dao/OrderDao.java b/src/main/java/dev/dao/OrderDao.java index 00999a2..97de2ae 100644 --- a/src/main/java/dev/dao/OrderDao.java +++ b/src/main/java/dev/dao/OrderDao.java @@ -1,25 +1,61 @@ package dev.dao; +import dev.database.DatabaseConnection; import dev.model.Order; +import java.sql.*; +import java.util.ArrayList; import java.util.List; public class OrderDao { public int save(Order order) { - // TODO: - // Insert order and return generated id + String sql = "INSERT INTO orders (user_id, total_price) VALUES (?, ?)"; + try (Connection conn = DatabaseConnection.getConnection(); + PreparedStatement pstmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) { + + pstmt.setInt(1, order.getUserId()); + pstmt.setDouble(2, order.getTotalPrice()); + pstmt.executeUpdate(); + + //Generated ID + try (ResultSet rs = pstmt.getGeneratedKeys()) { + if (rs.next()) { + return rs.getInt(1); + } + } + } catch (SQLException e) { + System.err.println("Error saving order: " + e.getMessage()); + } return -1; } public List findByUserId(int userId) { + List orders = new ArrayList<>(); + String sql = "SELECT * FROM orders WHERE user_id = ? ORDER BY created_at DESC"; - // TODO: - // Retrieve all orders of a user + try (Connection conn = DatabaseConnection.getConnection(); + PreparedStatement pstmt = conn.prepareStatement(sql)) { - return null; + pstmt.setInt(1, userId); + + try (ResultSet rs = pstmt.executeQuery()) { + while (rs.next()) { + Order order = new Order( + rs.getInt("id"), + rs.getInt("user_id"), + rs.getTimestamp("created_at"), + rs.getDouble("total_price") + ); + orders.add(order); + } + } + } catch (SQLException e) { + System.err.println("Error retrieving orders for user: " + e.getMessage()); + } + return orders; } } \ No newline at end of file diff --git a/src/main/java/dev/dao/OrderDetailDao.java b/src/main/java/dev/dao/OrderDetailDao.java index ed42f56..111ebee 100644 --- a/src/main/java/dev/dao/OrderDetailDao.java +++ b/src/main/java/dev/dao/OrderDetailDao.java @@ -1,24 +1,62 @@ package dev.dao; +import dev.database.DatabaseConnection; import dev.model.OrderDetail; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; import java.util.List; public class OrderDetailDao { public void save(OrderDetail detail) { - // TODO: - // Insert order detail + String sql = "INSERT INTO order_details (order_id, menu_item_id, quantity, price_at_purchase) VALUES (?, ?, ?, ?)"; + try (Connection conn = DatabaseConnection.getConnection(); + PreparedStatement pstmt = conn.prepareStatement(sql)) { + + pstmt.setInt(1, detail.getOrderId()); + pstmt.setInt(2, detail.getMenuItemId()); + pstmt.setInt(3, detail.getQuantity()); + pstmt.setDouble(4, detail.getPriceAtPurchase()); + + pstmt.executeUpdate(); + + } catch (SQLException e) { + System.err.println("Error saving order detail: " + e.getMessage()); + } } public List findByOrderId(int orderId) { - // TODO: - // Retrieve order details + List details = new ArrayList<>(); + String sql = "SELECT * FROM order_details WHERE order_id = ?"; - return null; + try (Connection conn = DatabaseConnection.getConnection(); + PreparedStatement pstmt = conn.prepareStatement(sql)) { + + pstmt.setInt(1, orderId); + + try (ResultSet rs = pstmt.executeQuery()) { + while (rs.next()) { + OrderDetail detail = new OrderDetail( + rs.getInt("id"), + rs.getInt("order_id"), + rs.getInt("menu_item_id"), + rs.getInt("quantity"), + rs.getDouble("price_at_purchase") + ); + details.add(detail); + } + } + } catch (SQLException e) { + System.err.println("Error retrieving order details: " + e.getMessage()); + } + return details; } } \ No newline at end of file diff --git a/src/main/java/dev/dao/UserDao.java b/src/main/java/dev/dao/UserDao.java index af08106..df23f7e 100644 --- a/src/main/java/dev/dao/UserDao.java +++ b/src/main/java/dev/dao/UserDao.java @@ -1,22 +1,59 @@ package dev.dao; +import dev.database.DatabaseConnection; import dev.model.User; +import java.sql.*; + public class UserDao { public boolean save(User user) { - // TODO: - // Insert user into database + String sql = "INSERT INTO users (username, password, email) VALUES (?, ?, ?)"; - return false; + try (Connection conn = DatabaseConnection.getConnection(); + PreparedStatement pstmt = conn.prepareStatement(sql)) { + + pstmt.setString(1, user.getUsername()); + pstmt.setString(2, user.getPassword()); + + if (user.getEmail() == null || user.getEmail().trim().isEmpty()) { + pstmt.setNull(3, Types.VARCHAR); + } else { + pstmt.setString(3, user.getEmail()); + } + + int rowsAffected = pstmt.executeUpdate(); + return rowsAffected > 0; + + } catch (SQLException e) { + System.err.println("Error saving user: " + e.getMessage()); + return false; + } } public User findByUsername(String username) { - // TODO: - // Find a user by username + String sql = "SELECT * FROM users WHERE username = ?"; + try (Connection conn = DatabaseConnection.getConnection(); + PreparedStatement pstmt = conn.prepareStatement(sql)) { + + pstmt.setString(1, username); + + try (ResultSet rs = pstmt.executeQuery()) { + if (rs.next()) { + return new User( + rs.getInt("id"), + rs.getString("username"), + rs.getString("password"), + rs.getString("email") + ); + } + } + } catch (SQLException e) { + System.err.println("Error finding user by username: " + e.getMessage()); + } return null; } diff --git a/src/main/java/dev/database/DatabaseConnection.java b/src/main/java/dev/database/DatabaseConnection.java index da45535..3a95ed0 100644 --- a/src/main/java/dev/database/DatabaseConnection.java +++ b/src/main/java/dev/database/DatabaseConnection.java @@ -1,6 +1,7 @@ package dev.database; import java.sql.Connection; +import java.sql.DriverManager; import java.sql.SQLException; public class DatabaseConnection { @@ -17,11 +18,7 @@ public class DatabaseConnection { public static Connection getConnection() throws SQLException { - - // TODO: - // Return a valid PostgreSQL connection - - return null; + return DriverManager.getConnection(URL, USER, PASSWORD); } } \ No newline at end of file diff --git a/src/main/java/dev/model/MenuItem.java b/src/main/java/dev/model/MenuItem.java index 265ecc1..b53f2d1 100644 --- a/src/main/java/dev/model/MenuItem.java +++ b/src/main/java/dev/model/MenuItem.java @@ -12,4 +12,31 @@ public class MenuItem { private String category; + public MenuItem(int id, String name, String description, double price, String category) { + this.id = id; + this.name = name; + this.description = description; + this.price = price; + this.category = category; + } + + public String getDescription() { + return this.description; + } + + public int getId() { + return this.id; + } + + public String getName() { + return this.name; + } + + public double getPrice() { + return this.price; + } + + public String getCategory() { + return this.category; + } } \ No newline at end of file diff --git a/src/main/java/dev/model/Order.java b/src/main/java/dev/model/Order.java index 32049cb..54a1b9e 100644 --- a/src/main/java/dev/model/Order.java +++ b/src/main/java/dev/model/Order.java @@ -1,5 +1,6 @@ package dev.model; +import java.sql.Timestamp; import java.time.LocalDateTime; public class Order { @@ -12,4 +13,18 @@ public class Order { private double totalPrice; + public Order(int id, int userId, Timestamp createdAt, double totalPrice) { + this.id = id; + this.userId = userId; + this.createdAt = createdAt.toLocalDateTime(); + this.totalPrice = totalPrice; + } + + public int getUserId() { + return userId; + } + + public double getTotalPrice() { + return totalPrice; + } } \ No newline at end of file diff --git a/src/main/java/dev/model/OrderDetail.java b/src/main/java/dev/model/OrderDetail.java index b5b8bbe..a440e69 100644 --- a/src/main/java/dev/model/OrderDetail.java +++ b/src/main/java/dev/model/OrderDetail.java @@ -12,4 +12,27 @@ public class OrderDetail { private double price; + public OrderDetail(int id, int orderId, int menuItemId, int quantity, double priceAtPurchase) { + this.id = id; + this.orderId = orderId; + this.menuItemId = menuItemId; + this.quantity = quantity; + this.price = priceAtPurchase; + } + + public int getOrderId() { + return orderId; + } + + public int getMenuItemId() { + return menuItemId; + } + + public int getQuantity() { + return quantity; + } + + public double getPriceAtPurchase() { + return price; + } } \ No newline at end of file diff --git a/src/main/java/dev/model/User.java b/src/main/java/dev/model/User.java index 0ab60c6..d3bd73d 100644 --- a/src/main/java/dev/model/User.java +++ b/src/main/java/dev/model/User.java @@ -10,4 +10,26 @@ public class User { private String email; + public User(int id, String username, String password, String email) { + this.id = id; + this.username = username; + this.password = password; + this.email = email; + } + + public String getUsername() { + return this.username; + } + + public int getId() { + return this.id; + } + + public String getEmail() { + return this.email; + } + + public String getPassword() { + return this.password; + } } \ No newline at end of file diff --git a/src/main/java/dev/service/AuthService.java b/src/main/java/dev/service/AuthService.java index bee866a..4f4c1c7 100644 --- a/src/main/java/dev/service/AuthService.java +++ b/src/main/java/dev/service/AuthService.java @@ -1,23 +1,75 @@ package dev.service; +import dev.database.DatabaseConnection; import dev.model.User; +import java.security.MessageDigest; +import java.sql.*; +import java.util.Base64; + public class AuthService { + private String hashPassword(String password) { + try { + MessageDigest digest = MessageDigest.getInstance("SHA-256"); + byte[] hash = digest.digest(password.getBytes("UTF-8")); + return Base64.getEncoder().encodeToString(hash); + } catch (Exception e) { + throw new RuntimeException("Hashing failed", e); + } + } + public boolean register(String username, String password, String email) { - // TODO: - // Validate and register user + if (username == null || username.trim().isEmpty() || password == null || password.isEmpty()) { + System.out.println("Username and password cannot be empty."); + return false; + } - return false; + String sql = "INSERT INTO users (username, password, email) VALUES (?, ?, ?)"; + try (Connection conn = DatabaseConnection.getConnection(); + PreparedStatement pstmt = conn.prepareStatement(sql)) { + + pstmt.setString(1, username); + pstmt.setString(2, hashPassword(password)); + if (email == null || email.trim().isEmpty()) { + pstmt.setNull(3, Types.VARCHAR); + } else { + pstmt.setString(3, email); + } + + pstmt.executeUpdate(); + return true; + } catch (SQLException e) { + System.out.println("Registration failed (Username might already exist): " + e.getMessage()); + return false; + } } public User login(String username, String password) { - // TODO: - // Authenticate user + String sql = "SELECT * FROM users WHERE username = ? AND password = ?"; + try (Connection conn = DatabaseConnection.getConnection(); + PreparedStatement pstmt = conn.prepareStatement(sql)) { + pstmt.setString(1, username); + pstmt.setString(2, hashPassword(password)); + + try (ResultSet rs = pstmt.executeQuery()) { + if (rs.next()) { + return new User( + rs.getInt("id"), + rs.getString("username"), + rs.getString("password"), + rs.getString("email") + ); + } + } + } catch (SQLException e) { + System.out.println("Login error: " + e.getMessage()); + } return null; + } } \ No newline at end of file diff --git a/src/main/java/dev/service/MenuService.java b/src/main/java/dev/service/MenuService.java index 6dbf4da..ce61714 100644 --- a/src/main/java/dev/service/MenuService.java +++ b/src/main/java/dev/service/MenuService.java @@ -1,12 +1,27 @@ package dev.service; +import dev.dao.MenuItemDao; +import dev.model.MenuItem; + +import java.util.List; + public class MenuService { public void showMenu() { + final MenuItemDao menuItemDao = new MenuItemDao(); - // TODO: - // Display menu items - + List items = menuItemDao.findAll(); + if (items.isEmpty()) { + System.out.println("The menu is currently empty."); + return; + } + System.out.println("\n===== MENU ====="); + for (MenuItem item : items) { + System.out.printf("[%d] %s - $%.2f (%s)\n", item.getId(), item.getName(), item.getPrice(), item.getCategory()); + if (item.getDescription() != null) { + System.out.println(" " + item.getDescription()); + } + } } } \ No newline at end of file diff --git a/src/main/java/dev/service/OrderService.java b/src/main/java/dev/service/OrderService.java index 14708f8..6a792fe 100644 --- a/src/main/java/dev/service/OrderService.java +++ b/src/main/java/dev/service/OrderService.java @@ -1,26 +1,158 @@ package dev.service; +import dev.dao.MenuItemDao; +import dev.database.DatabaseConnection; +import dev.model.MenuItem; + +import java.sql.*; +import java.util.Scanner; + public class OrderService { + private final MenuItemDao menuItemDao = new MenuItemDao(); + private final Scanner scanner = new Scanner(System.in); public void placeOrder(int userId) { + Connection conn = null; + try { + conn = DatabaseConnection.getConnection(); + conn.setAutoCommit(false); - // TODO: - // Create order + String insertOrderSql = "INSERT INTO orders (user_id, total_price) VALUES (?, 0.00)"; + PreparedStatement orderStmt = conn.prepareStatement(insertOrderSql, Statement.RETURN_GENERATED_KEYS); + orderStmt.setInt(1, userId); + orderStmt.executeUpdate(); + ResultSet generatedKeys = orderStmt.getGeneratedKeys(); + int orderId = 0; + if (generatedKeys.next()) { + orderId = generatedKeys.getInt(1); + } + + double grandTotal = 0.0; + boolean addingItems = true; + String insertDetailSql = "INSERT INTO order_details (order_id, menu_item_id, quantity, price_at_purchase) VALUES (?, ?, ?, ?)"; + PreparedStatement detailStmt = conn.prepareStatement(insertDetailSql); + + while (addingItems) { + System.out.print("Enter Menu Item ID to add (or 0 to finish): "); + int itemId = scanner.nextInt(); + if (itemId == 0) { + addingItems = false; + continue; + } + + MenuItem item = menuItemDao.findById(itemId); + if (item == null) { + System.out.println("Invalid Item ID. Try again."); + continue; + } + + System.out.print("Enter quantity: "); + int quantity = scanner.nextInt(); + if (quantity <= 0) { + System.out.println("Quantity must be greater than zero."); + continue; + } + + double subtotal = (item.getPrice()) * quantity; + grandTotal += subtotal; + + detailStmt.setInt(1, orderId); + detailStmt.setInt(2, item.getId()); + detailStmt.setInt(3, quantity); + detailStmt.setDouble(4, item.getPrice()); + detailStmt.executeUpdate(); + } + + if (grandTotal == 0.0) { + System.out.println("No items selected. Canceling order."); + conn.rollback(); + return; + } + + String updateOrderSql = "UPDATE orders SET total_price = ? WHERE id = ?"; + PreparedStatement updateStmt = conn.prepareStatement(updateOrderSql); + updateStmt.setDouble(1, grandTotal); + updateStmt.setInt(2, orderId); + updateStmt.executeUpdate(); + + conn.commit(); + System.out.println("Order successfully saved!"); + printReceipt(orderId); + + } catch (SQLException e) { + System.out.println("Order failed: " + e.getMessage()); + if (conn != null) { + try { conn.rollback(); } catch (SQLException ex) { ex.printStackTrace(); } + } + } } public void printReceipt(int orderId) { - // TODO: - // Print order receipt + String sql = "SELECT od.quantity, od.price_at_purchase, m.name, o.total_price " + + "FROM order_details od " + + "JOIN menu_items m ON od.menu_item_id = m.id " + + "JOIN orders o ON od.order_id = o.id " + + "WHERE od.order_id = ?"; + try (Connection conn = DatabaseConnection.getConnection(); + PreparedStatement pstmt = conn.prepareStatement(sql)) { + + pstmt.setInt(1, orderId); + try (ResultSet rs = pstmt.executeQuery()) { + System.out.println("\n========= RECEIPT (Order #" + orderId + ") ========="); + double grandTotal = 0.0; + boolean hasRows = false; + + while (rs.next()) { + hasRows = true; + String name = rs.getString("name"); + int qty = rs.getInt("quantity"); + double price = rs.getDouble("price_at_purchase"); + double subtotal = qty * price; + grandTotal = rs.getDouble("total_price"); + + System.out.printf("- %s x%d @ $%.2f = $%.2f\n", name, qty, price, subtotal); + } + if (!hasRows) { + System.out.println("Order not found."); + return; + } + System.out.println("----------------------------------------"); + System.out.printf("GRAND TOTAL: $%.2f\n", grandTotal); + System.out.println("========================================"); + } + } catch (SQLException e) { + System.out.println("Error generating receipt: " + e.getMessage()); + } } public void showOrderHistory(int userId) { + String sql = "SELECT id, created_at, total_price FROM orders WHERE user_id = ? ORDER BY created_at DESC"; - // TODO: - // Display user's order history + try (Connection conn = DatabaseConnection.getConnection(); + PreparedStatement pstmt = conn.prepareStatement(sql)) { + pstmt.setInt(1, userId); + try (ResultSet rs = pstmt.executeQuery()) { + System.out.println("\n===== YOUR ORDER HISTORY ====="); + boolean hasHistory = false; + while (rs.next()) { + hasHistory = true; + System.out.printf("Order #%d | Date: %s | Total Spent: $%.2f\n", + rs.getInt("id"), + rs.getTimestamp("created_at").toString(), + rs.getDouble("total_price") + ); + } + if (!hasHistory) { + System.out.println("You haven't placed any orders yet."); + } + } + } catch (SQLException e) { + System.out.println("Error fetching history: " + e.getMessage()); + } } } \ No newline at end of file diff --git a/src/main/java/dev/ui/ConsoleMenu.java b/src/main/java/dev/ui/ConsoleMenu.java index 663dc0c..babac5c 100644 --- a/src/main/java/dev/ui/ConsoleMenu.java +++ b/src/main/java/dev/ui/ConsoleMenu.java @@ -1,11 +1,20 @@ package dev.ui; +import dev.model.MenuItem; +import dev.model.User; +import dev.service.AuthService; +import dev.service.MenuService; +import dev.service.OrderService; + import java.util.Scanner; public class ConsoleMenu { private final Scanner scanner = new Scanner(System.in); + private final AuthService authService = new AuthService(); + private final MenuService menuService = new MenuService(); + private final OrderService orderService = new OrderService(); public void start() { @@ -22,11 +31,11 @@ public class ConsoleMenu { switch (choice) { case 1: - // TODO + handleLogin(); break; case 2: - // TODO + handleRegister(); break; case 3: @@ -41,4 +50,64 @@ public class ConsoleMenu { } + private void handleRegister() { + System.out.print("Choose Username: "); + String user = scanner.nextLine(); + System.out.print("Choose Password: "); + String pass = scanner.nextLine(); + System.out.print("Email (Optional, press Enter to skip): "); + String email = scanner.nextLine(); + + if (authService.register(user, pass, email)) { + System.out.println("Registration successful! You can now log in."); + } + } + + private void handleLogin() { + System.out.print("Username: "); + String user = scanner.nextLine(); + System.out.print("Password: "); + String pass = scanner.nextLine(); + + User loggedInUser = authService.login(user, pass); + if (loggedInUser != null) { + System.out.println("Welcome back, " + loggedInUser.getUsername() + "!"); + showCustomerDashboard(loggedInUser); + } else { + System.out.println("Invalid username or password."); + } + } + + private void showCustomerDashboard(User user) { + while (true) { + System.out.println("\n===== CUSTOMER MENU ====="); + System.out.println("1. Browse Menu"); + System.out.println("2. Place New Order"); + System.out.println("3. View Order History"); + System.out.println("4. Logout"); + System.out.print("Choose an option: "); + + int choice = scanner.nextInt(); + scanner.nextLine(); + + switch (choice) { + case 1: + menuService.showMenu(); + break; + case 2: + menuService.showMenu(); + orderService.placeOrder(user.getId()); + break; + case 3: + orderService.showOrderHistory(user.getId()); + break; + case 4: + System.out.println("Logged out successfully."); + return; + default: + System.out.println("Invalid choice."); + } + } + } + } \ No newline at end of file