This commit is contained in:
2018-10-28 19:54:52 +02:00
parent b668c9f427
commit 079be0ba5c
11 changed files with 157 additions and 6 deletions

View File

@@ -65,4 +65,14 @@ public class OrderItemDao {
throw new RuntimeException(e);
}
}
public static void deleteAllOrderItems() {
String sql = "delete from order_items";
try (Connection con = DataSourceProvider.getDataSource().getConnection();
PreparedStatement ps = con.prepareStatement(sql)) {
ps.executeUpdate();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}

View File

@@ -1,6 +1,7 @@
package DAO;
import DTO.Order;
import Exceptions.ValidationException;
import util.DataSourceProvider;
import java.sql.*;
@@ -19,6 +20,7 @@ public class OrdersDao {
if (rs.next()) {
order.setId(id);
order.setOrderNumber(rs.getString(1));
order.setOrderRows(OrderItemDao.getItemsForOrderId(id));
return order;
}
@@ -38,14 +40,16 @@ public class OrdersDao {
while(rs.next()) {
Order order = new Order();
order.setId(rs.getInt(1));
order.setOrderNumber(rs.getString(2));
order.setOrderRows(OrderItemDao.getItemsForOrderId(order.getId()));
orders.add(order);
}
}
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
@@ -96,4 +100,15 @@ public class OrdersDao {
}
return 0;
}
public static void deleteAllOrders() {
String sql = "delete from orders;";
try (Connection connection = DataSourceProvider.getDataSource().getConnection();
PreparedStatement ps = connection.prepareStatement(sql)) {
OrderItemDao.deleteAllOrderItems();
ps.executeUpdate();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}

View File

@@ -0,0 +1,25 @@
package DAO;
import DTO.Order;
import DTO.OrderItem;
import DTO.Report;
public class ReportDao {
public static Report getReport() {
Report report = new Report();
report.setCount(OrdersDao.getCount());
report.setTurnoverWithoutVAT(0);
int itemCount = 0;
for (Order order: OrdersDao.getAllOrders()) {
for (OrderItem orderItem: order.getOrderRows()) {
int turnover = report.getTurnoverWithoutVAT() + (orderItem.getPrice() * orderItem.getQuantity());
report.setTurnoverWithoutVAT(turnover);
itemCount++;
}
}
report.setAverageOrderAmount(report.getTurnoverWithoutVAT() / itemCount);
report.setTurnoverVAT((int)(report.getTurnoverWithoutVAT() * 0.2));
report.setTurnoverWithVAT(report.getTurnoverVAT() + report.getTurnoverWithoutVAT());
return report;
}
}

View File

@@ -1,4 +1,5 @@
package DTO;
import Exceptions.ValidationException;
import lombok.Data;
import java.util.LinkedList;

View File

@@ -0,0 +1,14 @@
package DTO;
import lombok.Data;
@Data
public class Report {
private Integer count;
private Integer averageOrderAmount;
private Integer turnoverWithoutVAT;
private Integer turnoverVAT;
private Integer turnoverWithVAT;
}

View File

@@ -0,0 +1,10 @@
package DTO;
import lombok.Data;
import java.util.List;
@Data
public class ValidationError {
private String code;
private List<String> arguments;
}

View File

@@ -0,0 +1,16 @@
package DTO;
import lombok.Data;
import java.util.LinkedList;
import java.util.List;
@Data
public class ValidationErrors {
private List<ValidationError> errors = new LinkedList<>();
public void addError(ValidationError error) {
errors.add(error);
}
}

View File

@@ -0,0 +1,13 @@
package Exceptions;
import DTO.ValidationError;
import lombok.Getter;
import lombok.Setter;
public class ValidationException extends Exception {
@Getter private ValidationError error = new ValidationError();
public ValidationException(String code) {
error.setCode(code);
}
}

View File

@@ -2,20 +2,17 @@ package servlet.api;
import DAO.OrdersDao;
import DTO.Order;
import DTO.ValidationError;
import DTO.ValidationErrors;
import com.fasterxml.jackson.databind.ObjectMapper;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebListener;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@WebServlet(urlPatterns = "/api/orders", name="Orders")
@@ -46,6 +43,18 @@ public class Orders extends HttpServlet {
String orderJson = req.getReader().lines().collect(Collectors.joining(" "));
Order order = new ObjectMapper().readValue(orderJson, Order.class);
if (order.getOrderNumber().length() < 2) {
resp.setStatus(400, "orderNumber parameter is empty");
resp.setContentType("application/json");
ValidationErrors errors = new ValidationErrors();
ValidationError error = new ValidationError();
error.setCode("too_short_number");
errors.addError(error);
resp.getWriter().print(new ObjectMapper().writeValueAsString(errors));
return;
}
OrdersDao.saveOrder(order);
resp.getWriter().print(new ObjectMapper().writeValueAsString(order));
@@ -58,6 +67,8 @@ public class Orders extends HttpServlet {
if (idString != null) {
int id = Integer.parseInt(idString);
OrdersDao.deleteOrderForId(id);
} else {
OrdersDao.deleteAllOrders();
}
}
}

View File

@@ -0,0 +1,22 @@
package servlet.api;
import DAO.ReportDao;
import com.fasterxml.jackson.databind.ObjectMapper;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(urlPatterns = "/api/orders/report", name="OrdersReport")
public class OrdersReport extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("application/json");
resp.getWriter().print(new ObjectMapper().writeValueAsString(ReportDao.getReport()));
}
}

View File

@@ -2,6 +2,10 @@ package servlet.html;
import DAO.OrdersDao;
import DTO.Order;
import DTO.ValidationError;
import DTO.ValidationErrors;
import Exceptions.ValidationException;
import com.fasterxml.jackson.databind.ObjectMapper;
import servlet.api.Orders;
import javax.servlet.ServletException;
@@ -39,6 +43,16 @@ public class OrdersForm extends HttpServlet
Order order = new Order();
order.setOrderNumber(orderNumber);
if (order.getOrderNumber().length() < 2) {
resp.setStatus(400, "orderNumber parameter is empty");
resp.setContentType("application/json");
ValidationErrors errors = new ValidationErrors();
ValidationError error = new ValidationError();
error.setCode("too_short_number");
errors.addError(error);
resp.getWriter().print(new ObjectMapper().writeValueAsString(errors));
return;
}
OrdersDao.saveOrder(order);
resp.getWriter().format("%d", order.getId());
}