/
FlatOrderImportUseCase.java
61 lines (50 loc) · 2.21 KB
/
FlatOrderImportUseCase.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package com.github.slaout.immutability.exercise2.usecase;
import com.github.slaout.immutability.exercise2.domain.Ean;
import com.github.slaout.immutability.exercise2.domain.Option;
import com.github.slaout.immutability.exercise2.domain.Order;
import com.github.slaout.immutability.exercise2.domain.OrderLine;
import com.github.slaout.immutability.exercise2.domain.Product;
import com.github.slaout.immutability.exercise2.dto.OrderCsvRow;
import java.util.ArrayList;
import java.util.List;
public class FlatOrderImportUseCase {
public List<Order> importFromParsedCsvRows(List<OrderCsvRow> rows) {
List<Order> orders = new ArrayList<>();
for (OrderCsvRow row : rows) {
Order order = getOrder(orders, row.getOrderId());
if (order == null) {
order = new Order();
order.setId(row.getOrderId());
order.setUserName(row.getUserName());
order.setAddress(row.getAddress());
order.setLines(new ArrayList<>());
orders.add(order);
}
OrderLine orderLine = getOrderLine(order.getLines(), row.getProductEan());
if (orderLine == null) {
orderLine = new OrderLine();
orderLine.setProduct(new Product(new Ean(row.getProductEan()), row.getProductName()));
orderLine.setQuantity(row.getQuantity());
orderLine.setPrice(row.getPrice());
orderLine.setOptions(new ArrayList<>());
order.getLines().add(orderLine);
}
if (row.getOption() != null) {
orderLine.getOptions().add(new Option(row.getOption()));
}
}
return orders;
}
private Order getOrder(List<Order> orders, long orderId) {
return orders.stream()
.filter(order -> order.getId() == orderId)
.findFirst()
.orElse(null);
}
private OrderLine getOrderLine(List<OrderLine> orderLines, String productEan) {
return orderLines.stream()
.filter(orderLine -> orderLine.getProduct().getEan().getCode().equals(productEan))
.findFirst()
.orElse(null);
}
}