diff --git a/src/main/java/DAO/OrderItemDao.java b/src/main/java/DAO/OrderItemDao.java new file mode 100644 index 0000000..ebc54a6 --- /dev/null +++ b/src/main/java/DAO/OrderItemDao.java @@ -0,0 +1,68 @@ +package DAO; + +import DTO.Order; +import DTO.OrderItem; +import util.DataSourceProvider; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.LinkedList; +import java.util.List; + +public class OrderItemDao { + + public static List getItemsForOrderId(int id) { + List result = new LinkedList<>(); + String sql = "select item_name, quantity, price from order_items where ORDER_ID=?"; + try (Connection con = DataSourceProvider.getDataSource().getConnection(); + PreparedStatement ps = con.prepareStatement(sql)) { + ps.setInt(1, id); + try(ResultSet rs = ps.executeQuery()) { + while (rs.next()) { + OrderItem item = new OrderItem(); + item.setItemName(rs.getString(1)); + item.setQuantity(rs.getInt(2)); + item.setPrice(rs.getInt(3)); + result.add(item); + } + } + + } catch (SQLException e) { + throw new RuntimeException(e); + } + return result; + } + + public static void saveOrderItem(OrderItem item, int orderId) { + String sql = "insert into order_items (order_id, item_name, quantity, price) VALUES (?,?,?,?);"; + try (Connection con = DataSourceProvider.getDataSource().getConnection(); + PreparedStatement ps = con.prepareStatement(sql)) { + ps.setInt(1, orderId); + ps.setString(2, item.getItemName()); + ps.setInt(3, item.getQuantity()); + ps.setInt(4, item.getPrice()); + ps.execute(); + } catch (SQLException e) { + throw new RuntimeException(e); + } + } + + public static void saveOrderItems(List items, int orderId) { + for (OrderItem item: items){ + saveOrderItem(item, orderId); + } + } + + public static void deleteOrderItemsForOrderId(int id) { + String sql = "delete from order_items where ORDER_ID=?"; + try (Connection con = DataSourceProvider.getDataSource().getConnection(); + PreparedStatement ps = con.prepareStatement(sql)) { + ps.setInt(1, id); + ps.executeUpdate(); + } catch (SQLException e) { + throw new RuntimeException(e); + } + } +} diff --git a/src/main/java/DAO/OrdersDao.java b/src/main/java/DAO/OrdersDao.java index 1e4a768..f7d300c 100644 --- a/src/main/java/DAO/OrdersDao.java +++ b/src/main/java/DAO/OrdersDao.java @@ -9,18 +9,17 @@ import java.util.List; public class OrdersDao { - static private int nextOrderId = 0; - public static Order getOrderForId(int id) { Order order = new Order(); - String sql = "select 'order_number' from ORDERS where id=?;"; + String sql = "select order_number from ORDERS where id=?;"; try (Connection connection = DataSourceProvider.getDataSource().getConnection(); PreparedStatement ps = connection.prepareStatement(sql)) { ps.setInt(1, id); try (ResultSet rs = ps.executeQuery()) { if (rs.next()) { order.setId(id); - order.setOrderNumber(rs.getString("order_number")); + order.setOrderNumber(rs.getString(1)); + order.setOrderRows(OrderItemDao.getItemsForOrderId(id)); return order; } } @@ -40,6 +39,7 @@ public class OrdersDao { Order order = new Order(); order.setId(rs.getInt(1)); order.setOrderNumber(rs.getString(2)); + order.setOrderRows(OrderItemDao.getItemsForOrderId(order.getId())); orders.add(order); } } @@ -48,17 +48,35 @@ public class OrdersDao { e.printStackTrace(); } + return orders; } public static void saveOrder(Order order) { - order.setId(nextOrderId++); - String sql = "insert into orders (id, order_number) values (?, ?);"; + String sql = "insert into orders (order_number) values (?);"; + try (Connection connection = DataSourceProvider.getDataSource().getConnection(); + PreparedStatement ps = connection.prepareStatement(sql); + PreparedStatement call = connection.prepareCall("CALL IDENTITY();")) { + ps.setString(1, order.getOrderNumber()); + ps.executeUpdate(); + try (ResultSet rs = call.executeQuery()) { + if (rs.next()) { + order.setId(rs.getInt(1)); + OrderItemDao.saveOrderItems(order.getOrderRows(), order.getId()); + } + } + } catch (SQLException e) { + throw new RuntimeException(e); + } + } + + public static void deleteOrderForId(int id) { + String sql = "DELETE FROM orders WHERE id=?;"; try (Connection connection = DataSourceProvider.getDataSource().getConnection(); PreparedStatement ps = connection.prepareStatement(sql)) { - ps.setInt(1, order.getId()); - ps.setString(2, order.getOrderNumber()); - ps.execute(); + ps.setInt(1, id); + ps.executeUpdate(); + OrderItemDao.deleteOrderItemsForOrderId(id); } catch (SQLException e) { throw new RuntimeException(e); } diff --git a/src/main/java/DTO/Order.java b/src/main/java/DTO/Order.java index 1507962..abb43fc 100644 --- a/src/main/java/DTO/Order.java +++ b/src/main/java/DTO/Order.java @@ -1,10 +1,11 @@ package DTO; import lombok.Data; +import java.util.LinkedList; import java.util.List; public @Data class Order { private int id; private String orderNumber; - private List orderRows; + private List orderRows = new LinkedList<>(); } diff --git a/src/main/java/servlet/api/Orders.java b/src/main/java/servlet/api/Orders.java index a8d5448..746e46c 100644 --- a/src/main/java/servlet/api/Orders.java +++ b/src/main/java/servlet/api/Orders.java @@ -50,4 +50,14 @@ public class Orders extends HttpServlet { resp.getWriter().print(new ObjectMapper().writeValueAsString(order)); } + + @Override + protected void doDelete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + resp.setContentType("application/json"); + String idString = req.getParameter("id"); + if (idString != null) { + int id = Integer.parseInt(idString); + OrdersDao.deleteOrderForId(id); + } + } } diff --git a/src/main/resources/sql/schema.sql b/src/main/resources/sql/schema.sql index 7214a5b..c4697b1 100644 --- a/src/main/resources/sql/schema.sql +++ b/src/main/resources/sql/schema.sql @@ -1,4 +1,16 @@ CREATE TABLE orders ( -id BIGINT NOT NULL PRIMARY KEY , -order_number VARCHAR (255) -); \ No newline at end of file + id BIGINT NOT NULL PRIMARY KEY IDENTITY, + order_number VARCHAR (255) +); + +CREATE TABLE order_items ( + id BIGINT NOT NULL PRIMARY KEY IDENTITY, + order_id BIGINT NOT NULL, + item_name VARCHAR (255), + quantity INT, + price INT, + FOREIGN KEY (order_id) REFERENCES orders (id) +); + +--INSERT INTO orders (order_number) values ('asdf'); +--INSERT INTO order_items (order_id, item_name, quantity, price) values (0, 'test', 1, 10); \ No newline at end of file