diff --git a/src/main/java/dev/dao/MenuItemDao.java b/src/main/java/dev/dao/MenuItemDao.java index 3bbebe9..9ee7e5c 100644 --- a/src/main/java/dev/dao/MenuItemDao.java +++ b/src/main/java/dev/dao/MenuItemDao.java @@ -1,24 +1,73 @@ package dev.dao; +import dev.database.DatabaseConnection; import dev.model.MenuItem; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; import java.util.List; public class MenuItemDao { public List findAll() { - // TODO: - // Retrieve all menu items + String sql = "SELECT * FROM menu_items"; + List items = new ArrayList<>(); - return null; + try (PreparedStatement ps = DatabaseConnection + .getConnection() + .prepareStatement(sql)) + { + ResultSet rs = ps.executeQuery(); + while (rs.next()) + { + MenuItem menuItem = new MenuItem(); + menuItem.setId(rs.getInt("id")); + menuItem.setName(rs.getString("name")); + menuItem.setDescription(rs.getString("description")); + menuItem.setPrice(rs.getDouble("price")); + menuItem.setCategory(rs.getString("category")); + + items.add(menuItem); + } + + } catch (SQLException e) { + + System.out.println(e.getStackTrace()); + } + + return items; } public MenuItem findById(int id) { - // TODO: - // Find menu item by id + String sql = "SELECT * FROM menu_items WHERE id=?"; + try(PreparedStatement ps = DatabaseConnection + .getConnection() + .prepareStatement(sql)) + { + ps.setInt(1,id); + ResultSet rs = ps.executeQuery(); + + if(rs.next()) + { + MenuItem item = new MenuItem(); + item.setId(rs.getInt("id")); + item.setName(rs.getString("name")); + item.setDescription(rs.getString("description")); + item.setPrice(rs.getDouble("price")); + item.setCategory(rs.getString("category")); + + return item; + } + } + catch (SQLException e) + { + e.printStackTrace(); + } return null; } diff --git a/src/main/java/dev/dao/OrderDao.java b/src/main/java/dev/dao/OrderDao.java index 00999a2..99c13a7 100644 --- a/src/main/java/dev/dao/OrderDao.java +++ b/src/main/java/dev/dao/OrderDao.java @@ -1,25 +1,75 @@ package dev.dao; +import dev.database.DatabaseConnection; import dev.model.Order; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Timestamp; +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 user_orders(user_id, created_at, total_price) VALUES(?,?,?)"; + + + try (PreparedStatement ps = DatabaseConnection + .getConnection() + .prepareStatement(sql, PreparedStatement.RETURN_GENERATED_KEYS)) + { + + ps.setInt(1, order.getUserId()); + ps.setTimestamp(2, Timestamp.valueOf(order.getCreatedAt())); + ps.setDouble(3, order.getTotalPrice()); + + ps.executeUpdate(); + ResultSet rs = ps.getGeneratedKeys(); + + if(rs.next()) return rs.getInt(1); + + } catch (SQLException e) { + + e.printStackTrace(); + } return -1; } public List findByUserId(int userId) { - // TODO: - // Retrieve all orders of a user + List orders = new ArrayList<>(); + String sql = "SELECT * FROM user_orders WHERE user_id=?"; - return null; + try(PreparedStatement ps = DatabaseConnection + .getConnection() + .prepareStatement(sql)) + + { + ps.setInt(1,userId); + ResultSet rs = ps.executeQuery(); + + while(rs.next()) + { + + Order order = new Order(); + + order.setId(rs.getInt("id")); + order.setUserId(rs.getInt("user_id")); + order.setTotalPrice(rs.getDouble("total_price")); + order.setCreatedAt(rs.getTimestamp("created_at").toLocalDateTime()); + + orders.add(order); + } + } + catch (SQLException e) + { + e.printStackTrace(); + } + 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..534cade 100644 --- a/src/main/java/dev/dao/OrderDetailDao.java +++ b/src/main/java/dev/dao/OrderDetailDao.java @@ -1,24 +1,70 @@ package dev.dao; +import dev.database.DatabaseConnection; + import dev.model.OrderDetail; + +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_id, quantity, item_price) VALUES (?,?,?,?)"; + + try (PreparedStatement ps = DatabaseConnection + .getConnection() + .prepareStatement(sql)) + { + ps.setInt(1,detail.getOrderId()); + ps.setInt(2,detail.getMenuItemId()); + ps.setInt(3,detail.getQuantity()); + ps.setDouble(4,detail.getPrice()); + + ps.executeUpdate(); + + } catch (SQLException e) { + + System.out.println(e.getStackTrace()); + } } public List findByOrderId(int orderId) { - // TODO: - // Retrieve order details + String sql = "SELECT * FROM order_details WHERE order_id=?"; - return null; + List details = new ArrayList<>(); + + try (PreparedStatement ps = DatabaseConnection + .getConnection() + .prepareStatement(sql)) + { + ps.setInt(1,orderId); + ResultSet rs = ps.executeQuery(); + + while(rs.next()) + { + OrderDetail detail = new OrderDetail(); + + detail.setOrderId(rs.getInt("order_id")); + detail.setMenuItemId(rs.getInt("menu_id")); + detail.setPrice(rs.getDouble("item_price")); + detail.setQuantity(rs.getInt("quantity")); + + details.add(detail); + } + + } catch (SQLException e) { + System.out.println(e.getStackTrace()); + } + + 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..88bf342 100644 --- a/src/main/java/dev/dao/UserDao.java +++ b/src/main/java/dev/dao/UserDao.java @@ -1,23 +1,58 @@ package dev.dao; +import dev.database.DatabaseConnection; import dev.model.User; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + public class UserDao { public boolean save(User user) { - // TODO: - // Insert user into database + String sql = "INSERT INTO users (username, password_hash, email) VALUES (?, ?, ?)"; + + try { + PreparedStatement ps = DatabaseConnection.getConnection().prepareStatement(sql); + ps.setString(1, user.getUsername()); + ps.setString(2, user.getPasswordHash()); + ps.setString(3, user.getEmail()); + ps.executeUpdate(); + return true; + } catch (SQLException e) { + + System.out.println("fail to save user: " + e.getMessage()); + } return false; } public User findByUsername(String username) { - // TODO: - // Find a user by username + String sql = "SELECT * FROM users WHERE username=?"; - return null; + User result = null; + + + try { + PreparedStatement stmt = DatabaseConnection.getConnection().prepareStatement(sql); + stmt.setString(1, username); + + ResultSet rs = stmt.executeQuery(); + + if (rs.next()){ + result = new User( + rs.getInt("id"), + rs.getString("username"), + rs.getString("password_hash"), + rs.getString("email") + ); + } + } catch (SQLException e) { + System.err.println("Unable to find user: " + e.getMessage()); + } + return result; } } \ No newline at end of file