complete service classes
This commit is contained in:
@@ -1,23 +1,51 @@
|
||||
package dev.service;
|
||||
|
||||
import dev.dao.UserDao;
|
||||
import dev.model.User;
|
||||
|
||||
import java.security.MessageDigest;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
|
||||
public class AuthService {
|
||||
|
||||
private final UserDao userDao = new UserDao();
|
||||
|
||||
|
||||
private String hashPassword(String password) {
|
||||
try {
|
||||
MessageDigest md = MessageDigest.getInstance("SHA-256");
|
||||
byte[] hash = md.digest(password.getBytes());
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (byte b : hash) sb.append(String.format("%02x", b));
|
||||
return sb.toString();
|
||||
} catch (NoSuchAlgorithmException e) {
|
||||
throw new RuntimeException("Hashing error", e);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean register(String username, String password, String email) {
|
||||
|
||||
// TODO:
|
||||
// Validate and register user
|
||||
|
||||
return false;
|
||||
if (username == null || username.isBlank() || password == null || password.isBlank()) {
|
||||
System.out.println("Username and password are required.");
|
||||
return false;
|
||||
}
|
||||
if (userDao.findByUsername(username) != null) {
|
||||
System.out.println("Username already taken.");
|
||||
return false;
|
||||
}
|
||||
User user = new User(username, hashPassword(password), email.isBlank() ? null : email);
|
||||
return userDao.save(user);
|
||||
}
|
||||
|
||||
public User login(String username, String password) {
|
||||
|
||||
// TODO:
|
||||
// Authenticate user
|
||||
|
||||
return null;
|
||||
User user = userDao.findByUsername(username);
|
||||
if (user == null) {
|
||||
System.out.println("User not found.");
|
||||
return null;
|
||||
}
|
||||
if (!user.getPassword().equals(hashPassword(password))) {
|
||||
System.out.println("Incorrect password.");
|
||||
return null;
|
||||
}
|
||||
return user;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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() {
|
||||
|
||||
// TODO:
|
||||
// Display menu items
|
||||
private final MenuItemDao menuItemDao = new MenuItemDao();
|
||||
|
||||
public List<MenuItem> getMenuItems() {
|
||||
return menuItemDao.findAll();
|
||||
}
|
||||
|
||||
public void showMenu() {
|
||||
List<MenuItem> items = getMenuItems();
|
||||
System.out.println("\n--- MENU ---");
|
||||
System.out.printf("%-5s %-25s %-12s %s%n", "ID", "Name", "Price", "Category");
|
||||
System.out.println("-".repeat(55));
|
||||
for (MenuItem item : items) {
|
||||
System.out.printf("%-5d %-25s $%-11.2f %s%n",
|
||||
item.getId(), item.getName(), item.getPrice(), item.getCategory());
|
||||
}
|
||||
System.out.println("-".repeat(55));
|
||||
}
|
||||
}
|
||||
@@ -1,26 +1,101 @@
|
||||
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.*;
|
||||
|
||||
public class OrderService {
|
||||
|
||||
private final MenuItemDao menuItemDao = new MenuItemDao();
|
||||
private final OrderDao orderDao = new OrderDao();
|
||||
private final OrderDetailDao orderDetailDao = new OrderDetailDao();
|
||||
private final MenuService menuService = new MenuService();
|
||||
private final Scanner scanner = new Scanner(System.in);
|
||||
|
||||
public void placeOrder(int userId) {
|
||||
menuService.showMenu();
|
||||
|
||||
// TODO:
|
||||
// Create order
|
||||
Map<Integer, int[]> cart = new LinkedHashMap<>(); // int[] = {quantity}
|
||||
Map<Integer, MenuItem> itemMap = new HashMap<>();
|
||||
|
||||
while (true) {
|
||||
System.out.print("\nEnter item ID to add (0 to finish): ");
|
||||
int id = scanner.nextInt();
|
||||
if (id == 0) break;
|
||||
|
||||
MenuItem item = menuItemDao.findById(id);
|
||||
if (item == null) {
|
||||
System.out.println("Item not found, try again.");
|
||||
continue;
|
||||
}
|
||||
System.out.print("Enter quantity: ");
|
||||
int qty = scanner.nextInt();
|
||||
if (qty <= 0) { System.out.println("Quantity must be > 0."); continue; }
|
||||
|
||||
cart.merge(id, new int[]{qty}, (a, b) -> new int[]{a[0] + b[0]});
|
||||
itemMap.put(id, item);
|
||||
System.out.printf("Added %dx %s%n", qty, item.getName());
|
||||
}
|
||||
|
||||
if (cart.isEmpty()) { System.out.println("No items selected."); return; }
|
||||
|
||||
// Calculate total
|
||||
double total = cart.entrySet().stream()
|
||||
.mapToDouble(e -> itemMap.get(e.getKey()).getPrice() * e.getValue()[0])
|
||||
.sum();
|
||||
|
||||
// Save order
|
||||
Order order = new Order(userId, total);
|
||||
int orderId = orderDao.save(order);
|
||||
if (orderId == -1) { System.out.println("Failed to save order."); return; }
|
||||
|
||||
// Save order details
|
||||
for (Map.Entry<Integer, int[]> entry : cart.entrySet()) {
|
||||
MenuItem item = itemMap.get(entry.getKey());
|
||||
OrderDetail detail = new OrderDetail(orderId, item.getId(), entry.getValue()[0], item.getPrice());
|
||||
orderDetailDao.save(detail);
|
||||
}
|
||||
|
||||
printReceipt(orderId);
|
||||
}
|
||||
|
||||
public void printReceipt(int orderId) {
|
||||
List<OrderDetail> details = orderDetailDao.findByOrderId(orderId);
|
||||
System.out.println("\n--- RECEIPT ---");
|
||||
System.out.printf("%-20s %5s %8s %8s%n", "Item", "Qty", "Unit", "Total");
|
||||
System.out.println("-".repeat(47));
|
||||
|
||||
// TODO:
|
||||
// Print order receipt
|
||||
double grandTotal = 0;
|
||||
for (OrderDetail d : details) {
|
||||
MenuItem item = menuItemDao.findById(d.getMenuItemId());
|
||||
String name = (item != null) ? item.getName() : "Unknown";
|
||||
double subtotal = d.getPrice() * d.getQuantity();
|
||||
grandTotal += subtotal;
|
||||
System.out.printf("%-20s %5d $%7.2f $%7.2f%n",
|
||||
name, d.getQuantity(), d.getPrice(), subtotal);
|
||||
}
|
||||
|
||||
System.out.println("-".repeat(47));
|
||||
System.out.printf("%-20s %18s $%7.2f%n", "TOTAL", "", grandTotal);
|
||||
System.out.println("Order saved successfully!");
|
||||
}
|
||||
|
||||
public void showOrderHistory(int userId) {
|
||||
List<Order> orders = orderDao.findByUserId(userId);
|
||||
if (orders.isEmpty()) { System.out.println("No past orders."); return; }
|
||||
|
||||
// TODO:
|
||||
// Display user's order history
|
||||
|
||||
System.out.println("\n--- ORDER HISTORY ---");
|
||||
System.out.printf("%-8s %-25s %s%n", "Order#", "Date", "Total");
|
||||
System.out.println("-".repeat(45));
|
||||
for (Order o : orders) {
|
||||
System.out.printf("%-8d %-25s $%.2f%n",
|
||||
o.getId(), o.getCreatedAt().toString().replace("T", " "), o.getTotalPrice());
|
||||
}
|
||||
System.out.println("-".repeat(45));
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user