Compare commits

10 Commits
Author SHA1 Message Date
Parmis_jamami 2c95ef5f8e Complete ConsoleMenu 2026-06-25 20:58:59 +03:30
Parmis_jamami 05ab2a497a modify DatabaseConnection.java 2026-06-25 20:57:47 +03:30
Parmis_jamami 667d2f66c7 Complete OrderService 2026-06-25 19:18:39 +03:30
Parmis_jamami 67538b25bb Complete MenuService 2026-06-25 19:12:44 +03:30
Parmis_jamami 8976c89fe3 Complete AuthService 2026-06-25 19:09:38 +03:30
Parmis_jamami 1b95925aaf Complete OrderDetail and OrderDetailDao 2026-06-25 17:59:51 +03:30
Parmis_jamami 45be56851e Complete Order and OrderDao 2026-06-25 17:52:18 +03:30
Parmis_jamami 3a205532fb add MenuItem and MenuItemDao 2026-06-25 17:31:06 +03:30
Parmis_jamami b962a08296 modify database.sql 2026-06-25 17:29:56 +03:30
Parmis_jamami f099fc6538 Complete Users and UserDao 2026-06-25 17:16:34 +03:30
21 changed files with 717 additions and 68 deletions
+10
View File
@@ -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/
+13
View File
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<annotationProcessing>
<profile name="Maven default annotation processors profile" enabled="true">
<sourceOutputDir name="target/generated-sources/annotations" />
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
<outputRelativeToContentRoot value="true" />
<module name="WS-10-Database" />
</profile>
</annotationProcessing>
</component>
</project>
+7
View File
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding">
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
</component>
</project>
+6
View File
@@ -0,0 +1,6 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="SqlNoDataSourceInspection" enabled="false" level="WARNING" enabled_by_default="false" />
</profile>
</component>
+20
View File
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RemoteRepositoriesConfiguration">
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Maven Central repository" />
<option name="url" value="https://repo1.maven.org/maven2" />
</remote-repository>
<remote-repository>
<option name="id" value="jboss.community" />
<option name="name" value="JBoss Community repository" />
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
</remote-repository>
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Central Repository" />
<option name="url" value="https://mirror-maven.runflare.com/maven2" />
</remote-repository>
</component>
</project>
+12
View File
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="MavenProjectsManager">
<option name="originalFiles">
<list>
<option value="$PROJECT_DIR$/pom.xml" />
</list>
</option>
</component>
<component name="ProjectRootManager" version="2" project-jdk-name="25" project-jdk-type="JavaSDK" />
</project>
Generated
+6
View File
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>
+1 -2
View File
@@ -1,7 +1,6 @@
CREATE TABLE users(
CREAT TABLE users(
id SERIAL PRIMARY KEY, id SERIAL PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE, username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(100) NOT NULL, password VARCHAR(100) NOT NULL,
+64 -5
View File
@@ -1,23 +1,82 @@
package dev.dao; package dev.dao;
import dev.database.DatabaseConnection;
import dev.model.MenuItem; import dev.model.MenuItem;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List; import java.util.List;
public class MenuItemDao { public class MenuItemDao {
public List<MenuItem> findAll() { public List<MenuItem> findAll() {
// TODO: String sql = "SELECT id, name, description, price, category FROM menu_items";
// Retrieve all menu items
return null; List<MenuItem> menuItems = new ArrayList<>();
try (
Connection connection = DatabaseConnection.getConnection();
PreparedStatement statement = connection.prepareStatement(sql);
ResultSet resultSet = statement.executeQuery()
) {
while (resultSet.next()) {
MenuItem menuItem = new MenuItem();
menuItem.setId(resultSet.getInt("id"));
menuItem.setName(resultSet.getString("name"));
menuItem.setDescription(resultSet.getString("description"));
menuItem.setPrice(resultSet.getDouble("price"));
menuItem.setCategory(resultSet.getString("category"));
menuItems.add(menuItem);
}
} catch (SQLException e) {
System.out.println("Error loading menu items: " + e.getMessage());
}
return menuItems;
} }
public MenuItem findById(int id) { public MenuItem findById(int id) {
// TODO: String sql = "SELECT id, name, description, price, category FROM menu_items WHERE id = ?";
// Find menu item by id
try (
Connection connection = DatabaseConnection.getConnection();
PreparedStatement statement = connection.prepareStatement(sql)
) {
statement.setInt(1, id);
ResultSet resultSet = statement.executeQuery();
if (resultSet.next()) {
MenuItem menuItem = new MenuItem();
menuItem.setId(resultSet.getInt("id"));
menuItem.setName(resultSet.getString("name"));
menuItem.setDescription(resultSet.getString("description"));
menuItem.setPrice(resultSet.getDouble("price"));
menuItem.setCategory(resultSet.getString("category"));
return menuItem;
}
} catch (SQLException e) {
System.out.println("Error finding menu item: " + e.getMessage());
}
return null; return null;
} }
+50 -5
View File
@@ -1,25 +1,70 @@
package dev.dao; package dev.dao;
import dev.database.DatabaseConnection;
import dev.model.Order; import dev.model.Order;
import java.sql.*;
import java.util.ArrayList;
import java.util.List; import java.util.List;
public class OrderDao { public class OrderDao {
public int save(Order order) { public int save(Order order) {
// TODO: String sql = "INSERT INTO orders (user_id, total_price) VALUES (?, ?) RETURNING id";
// Insert order and return generated id
try (
Connection connection = DatabaseConnection.getConnection();
PreparedStatement statement = connection.prepareStatement(sql)
) {
statement.setInt(1, order.getUserId());
statement.setDouble(2, order.getTotalPrice());
ResultSet resultSet = statement.executeQuery();
if (resultSet.next()) {
return resultSet.getInt("id");
}
} catch (SQLException e) {
System.out.println("Error saving order: " + e.getMessage());
}
return -1; return -1;
} }
public List<Order> findByUserId(int userId) { public List<Order> findByUserId(int userId) {
// TODO: String sql = "SELECT id, user_id, created_at, total_price FROM orders WHERE user_id = ?";
// Retrieve all orders of a user
return null; List<Order> orders = new ArrayList<>();
try (
Connection connection = DatabaseConnection.getConnection();
PreparedStatement statement = connection.prepareStatement(sql)
) {
statement.setInt(1, userId);
ResultSet resultSet = statement.executeQuery();
while (resultSet.next()) {
Order order = new Order();
order.setId(resultSet.getInt("id"));
order.setUserId(resultSet.getInt("user_id"));
order.setCreatedAt(resultSet.getTimestamp("created_at").toLocalDateTime());
order.setTotalPrice(resultSet.getDouble("total_price"));
orders.add(order);
} }
} catch (SQLException e) {
System.out.println("Error loading orders: " + e.getMessage());
}
return orders;
}
} }
+55 -5
View File
@@ -1,24 +1,74 @@
package dev.dao; package dev.dao;
import dev.database.DatabaseConnection;
import dev.model.OrderDetail; 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; import java.util.List;
public class OrderDetailDao { public class OrderDetailDao {
public void save(OrderDetail detail) { public void save(OrderDetail detail) {
// TODO: String sql = "INSERT INTO order_details (order_id, menu_item_id, quantity, price) VALUES (?, ?, ?, ?)";
// Insert order detail
try (
Connection connection = DatabaseConnection.getConnection();
PreparedStatement statement = connection.prepareStatement(sql)
) {
statement.setInt(1, detail.getOrderId());
statement.setInt(2, detail.getMenuItemId());
statement.setInt(3, detail.getQuantity());
statement.setDouble(4, detail.getPrice());
statement.executeUpdate();
} catch (SQLException e) {
System.out.println("Error saving order detail: " + e.getMessage());
}
} }
public List<OrderDetail> findByOrderId(int orderId) { public List<OrderDetail> findByOrderId(int orderId) {
// TODO: String sql = "SELECT id, order_id, menu_item_id, quantity, price FROM order_details WHERE order_id = ?";
// Retrieve order details
return null; List<OrderDetail> details = new ArrayList<>();
try (
Connection connection = DatabaseConnection.getConnection();
PreparedStatement statement = connection.prepareStatement(sql)
) {
statement.setInt(1, orderId);
ResultSet resultSet = statement.executeQuery();
while (resultSet.next()) {
OrderDetail detail = new OrderDetail();
detail.setId(resultSet.getInt("id"));
detail.setOrderId(resultSet.getInt("order_id"));
detail.setMenuItemId(resultSet.getInt("menu_item_id"));
detail.setQuantity(resultSet.getInt("quantity"));
detail.setPrice(resultSet.getDouble("price"));
details.add(detail);
} }
} catch (SQLException e) {
System.out.println("Error loading order details: " + e.getMessage());
}
return details;
}
} }
+54 -4
View File
@@ -1,21 +1,71 @@
package dev.dao; package dev.dao;
import dev.database.DatabaseConnection;
import dev.model.User; import dev.model.User;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class UserDao { public class UserDao {
public boolean save(User user) { public boolean save(User user) {
// TODO: String sql = "INSERT INTO users (username, password, email) VALUES (?, ?, ?)";
// Insert user into database
try (
Connection connection = DatabaseConnection.getConnection();
PreparedStatement statement = connection.prepareStatement(sql)
) {
statement.setString(1, user.getUsername());
statement.setString(2, user.getPassword());
statement.setString(3, user.getEmail());
int rows = statement.executeUpdate();
return rows > 0;
} catch (SQLException e) {
System.out.println("Error saving user: " + e.getMessage());
return false; return false;
}
} }
public User findByUsername(String username) { public User findByUsername(String username) {
// TODO: String sql = "SELECT id, username, password, email FROM users WHERE username = ?";
// Find a user by username
try (
Connection connection = DatabaseConnection.getConnection();
PreparedStatement statement = connection.prepareStatement(sql)
) {
statement.setString(1, username);
ResultSet resultSet = statement.executeQuery();
if (resultSet.next()) {
User user = new User();
user.setId(resultSet.getInt("id"));
user.setUsername(resultSet.getString("username"));
user.setPassword(resultSet.getString("password"));
user.setEmail(resultSet.getString("email"));
return user;
}
} catch (SQLException e) {
System.out.println("Error finding user: " + e.getMessage());
}
return null; return null;
} }
@@ -6,7 +6,7 @@ import java.sql.SQLException;
public class DatabaseConnection { public class DatabaseConnection {
private static final String URL = "jdbc:postgresql://localhost:5432/restaurant_db"; // DB Server private static final String URL = "jdbc:postgresql://localhost:5432/postgres"; // DB Server
private static final String USER = "postgres"; // Your Username private static final String USER = "postgres"; // Your Username
+39 -4
View File
@@ -3,13 +3,48 @@ package dev.model;
public class MenuItem { public class MenuItem {
private int id; private int id;
private String name; private String name;
private String description; private String description;
private double price; private double price;
private String category; private String category;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
} }
+31
View File
@@ -12,4 +12,35 @@ public class Order {
private double totalPrice; private double totalPrice;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public LocalDateTime getCreatedAt() {
return createdAt;
}
public void setCreatedAt(LocalDateTime createdAt) {
this.createdAt = createdAt;
}
public double getTotalPrice() {
return totalPrice;
}
public void setTotalPrice(double totalPrice) {
this.totalPrice = totalPrice;
}
} }
+39
View File
@@ -12,4 +12,43 @@ public class OrderDetail {
private double price; private double price;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getOrderId() {
return orderId;
}
public void setOrderId(int orderId) {
this.orderId = orderId;
}
public int getMenuItemId() {
return menuItemId;
}
public void setMenuItemId(int menuItemId) {
this.menuItemId = menuItemId;
}
public int getQuantity() {
return quantity;
}
public void setQuantity(int quantity) {
this.quantity = quantity;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
} }
+31
View File
@@ -10,4 +10,35 @@ public class User {
private String email; private String email;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
} }
+32 -5
View File
@@ -1,21 +1,48 @@
package dev.service; package dev.service;
import dev.dao.UserDao;
import dev.model.User; import dev.model.User;
public class AuthService { public class AuthService {
private UserDao userDao = new UserDao();
public boolean register(String username, String password, String email) { public boolean register(String username, String password, String email) {
// TODO: if (username == null || username.isBlank()) {
// Validate and register user
return false; return false;
} }
if (password == null || password.isBlank()) {
return false;
}
User existingUser = userDao.findByUsername(username);
if (existingUser != null) {
return false;
}
User user = new User();
user.setUsername(username);
user.setPassword(password);
user.setEmail(email);
return userDao.save(user);
}
public User login(String username, String password) { public User login(String username, String password) {
// TODO: User user = userDao.findByUsername(username);
// Authenticate user
if (user == null) {
return null;
}
if (user.getPassword().equals(password)) {
return user;
}
return null; return null;
} }
+23 -2
View File
@@ -1,12 +1,33 @@
package dev.service; package dev.service;
import dev.dao.MenuItemDao;
import dev.model.MenuItem;
import java.util.List;
public class MenuService { public class MenuService {
private MenuItemDao menuItemDao = new MenuItemDao();
public void showMenu() { public void showMenu() {
// TODO: List<MenuItem> menuItems = menuItemDao.findAll();
// Display menu items
if (menuItems.isEmpty()) {
System.out.println("Menu is empty.");
return;
} }
System.out.println("===== MENU =====");
for (MenuItem item : menuItems) {
System.out.println(
item.getId() + ". " +
item.getName() + " - " +
item.getDescription() + " - $" +
item.getPrice() + " - " +
item.getCategory()
);
}
}
} }
+121 -6
View File
@@ -1,26 +1,141 @@
package dev.service; 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 { public class OrderService {
private final Scanner scanner = new Scanner(System.in);
private final MenuItemDao menuItemDao = new MenuItemDao();
private final OrderDao orderDao = new OrderDao();
private final OrderDetailDao orderDetailDao = new OrderDetailDao();
public void placeOrder(int userId) { public void placeOrder(int userId) {
// TODO: List<OrderDetail> cart = new ArrayList<>();
// Create order double totalPrice = 0;
while (true) {
System.out.print("Enter item id or 0 to finish: ");
int itemId = scanner.nextInt();
if (itemId == 0) {
break;
}
MenuItem menuItem = menuItemDao.findById(itemId);
if (menuItem == null) {
System.out.println("Item not found.");
continue;
}
System.out.print("Enter quantity: ");
int quantity = scanner.nextInt();
if (quantity <= 0) {
System.out.println("Quantity must be greater than 0.");
continue;
}
OrderDetail detail = new OrderDetail();
detail.setMenuItemId(menuItem.getId());
detail.setQuantity(quantity);
detail.setPrice(menuItem.getPrice());
cart.add(detail);
totalPrice += menuItem.getPrice() * quantity;
System.out.println("Added " + quantity + "x " + menuItem.getName());
}
if (cart.isEmpty()) {
System.out.println("Order cancelled.");
return;
}
Order order = new Order();
order.setUserId(userId);
order.setTotalPrice(totalPrice);
int orderId = orderDao.save(order);
if (orderId == -1) {
System.out.println("Order could not be saved.");
return;
}
for (OrderDetail detail : cart) {
detail.setOrderId(orderId);
orderDetailDao.save(detail);
}
System.out.println("Order saved successfully.");
printReceipt(orderId);
} }
public void printReceipt(int orderId) { public void printReceipt(int orderId) {
// TODO: List<OrderDetail> details = orderDetailDao.findByOrderId(orderId);
// Print order receipt
if (details.isEmpty()) {
System.out.println("No details found for this order.");
return;
}
double finalTotal = 0;
System.out.println();
System.out.println("===== RECEIPT =====");
for (OrderDetail detail : details) {
MenuItem item = menuItemDao.findById(detail.getMenuItemId());
double subtotal = detail.getPrice() * detail.getQuantity();
finalTotal += subtotal;
System.out.println(
item.getName() +
" | Qty: " + detail.getQuantity() +
" | Unit: $" + detail.getPrice() +
" | Total: $" + subtotal
);
}
System.out.println("-------------------");
System.out.println("Final Total: $" + finalTotal);
} }
public void showOrderHistory(int userId) { public void showOrderHistory(int userId) {
// TODO: List<Order> orders = orderDao.findByUserId(userId);
// Display user's order history
if (orders.isEmpty()) {
System.out.println("No orders found.");
return;
} }
System.out.println();
System.out.println("===== ORDER HISTORY =====");
for (Order order : orders) {
System.out.println(
"Order #" + order.getId() +
" | Date: " + order.getCreatedAt() +
" | Total: $" + order.getTotalPrice()
);
}
}
} }
+94 -21
View File
@@ -1,44 +1,117 @@
package dev.ui; package dev.ui;
import dev.model.User;
import dev.service.AuthService;
import dev.service.MenuService;
import dev.service.OrderService;
import java.util.Scanner; import java.util.Scanner;
public class ConsoleMenu { public class ConsoleMenu {
private final Scanner scanner = private final Scanner scanner = new Scanner(System.in);
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() { public void start() {
while (true) { while (true) {
System.out.println(); System.out.println();
System.out.println("===== JAVA PIZZERIA ====="); System.out.println("===== RESTAURANT SYSTEM =====");
System.out.println("1. Login"); System.out.println("1. Register");
System.out.println("2. Register"); System.out.println("2. Login");
System.out.println("3. Exit"); System.out.println("0. Exit");
System.out.print("Choose: ");
int choice = scanner.nextInt(); int choice = scanner.nextInt();
scanner.nextLine();
switch (choice) { if (choice == 1) {
register();
case 1: } else if (choice == 2) {
// TODO login();
break; } else if (choice == 0) {
System.out.println("Goodbye!");
case 2:
// TODO
break;
case 3:
return; return;
} else {
default: System.out.println("Invalid choice.");
System.out.println("Invalid choice"); }
}
} }
private void register() {
System.out.print("Username: ");
String username = scanner.nextLine();
System.out.print("Password: ");
String password = scanner.nextLine();
System.out.print("Email: ");
String email = scanner.nextLine();
boolean success = authService.register(username, password, email);
if (success) {
System.out.println("Registration successful.");
} else {
System.out.println("Registration failed.");
}
} }
private void login() {
System.out.print("Username: ");
String username = scanner.nextLine();
System.out.print("Password: ");
String password = scanner.nextLine();
User user = authService.login(username, password);
if (user == null) {
System.out.println("Invalid username or password.");
return;
} }
System.out.println("Login successful. Welcome " + user.getUsername());
userMenu(user);
}
private void userMenu(User user) {
while (true) {
System.out.println();
System.out.println("===== USER MENU =====");
System.out.println("1. View Menu");
System.out.println("2. Place Order");
System.out.println("3. Order History");
System.out.println("0. Logout");
System.out.print("Choose: ");
int choice = scanner.nextInt();
scanner.nextLine();
if (choice == 1) {
menuService.showMenu();
} else if (choice == 2) {
menuService.showMenu();
orderService.placeOrder(user.getId());
} else if (choice == 3) {
orderService.showOrderHistory(user.getId());
} else if (choice == 0) {
System.out.println("Logged out.");
return;
} else {
System.out.println("Invalid choice.");
}
}
}
} }