Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 12 additions & 2 deletions src/main/java/yourssu/order/domain/Order.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,21 @@
package yourssu.order.domain;

import java.util.ArrayList;
import java.util.List;

public class Order {
private final List<OrderItem> items;

public Order(List<OrderItem> items) {
this.items = items;
public List<OrderItem> getItems() {
return items;
}

public Order() {
items = new ArrayList<>();
}


public void addItem(OrderItem item) {
items.add(item);
}
}
8 changes: 8 additions & 0 deletions src/main/java/yourssu/order/domain/OrderItem.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,12 @@ public OrderItem(String name, int price, int count) {
this.price = price;
this.count = count;
}

public int calculateTotalPrice() {
return price * count;
}

public int getCount() {
return count;
}
}
17 changes: 17 additions & 0 deletions src/main/java/yourssu/order/service/OrderAnalyticsService.java
Original file line number Diff line number Diff line change
@@ -1,4 +1,21 @@
package yourssu.order.service;

import yourssu.order.domain.Order;
import yourssu.order.domain.OrderItem;

import java.util.List;

public class OrderAnalyticsService {

public double calculateAverageCost(List<Order> orders) {
int totalPrice = orders.stream().flatMap(order -> order.getItems().stream())
.mapToInt(OrderItem::calculateTotalPrice)
.sum();

int count = orders.stream().flatMap(order -> order.getItems().stream())
.mapToInt(OrderItem::getCount)
.sum();

return totalPrice / (double) count;
}
}
22 changes: 22 additions & 0 deletions src/main/java/yourssu/user/domain/OrderUser.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package yourssu.user.domain;

import yourssu.order.domain.Order;

import java.util.ArrayList;
import java.util.List;

public class OrderUser {
private final List<Order> orders;

public OrderUser() {
orders = new ArrayList<>();
}

public List<Order> getOrders() {
return orders;
}

public void addOrder(Order order) {
orders.add(order);
}
}
37 changes: 37 additions & 0 deletions src/test/java/yourssu/Problem1Test.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package yourssu;

import org.junit.jupiter.api.Test;
import yourssu.order.domain.Order;
import yourssu.order.domain.OrderItem;
import yourssu.order.service.OrderAnalyticsService;
import yourssu.user.domain.OrderUser;


import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.byLessThan;

public class Problem1Test {

@Test
void calculationAverage() {
// given
Order order1 = new Order();
order1.addItem(new OrderItem("A", 1000, 3));
order1.addItem(new OrderItem("B", 2000, 6));

Order order2 = new Order();
order2.addItem(new OrderItem("A", 1000, 3));
order2.addItem(new OrderItem("B", 2000, 6));

OrderUser user = new OrderUser();
user.addOrder(order1);
user.addOrder(order2);

OrderAnalyticsService service = new OrderAnalyticsService();
// when
double averageCost = service.calculateAverageCost(user.getOrders());

// then
assertThat(averageCost).isCloseTo(15000 / 9F, byLessThan(0.0001));
}
}