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
4 changes: 4 additions & 0 deletions src/main/java/yourssu/order/domain/Order.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,8 @@ public class Order {
public Order(List<OrderItem> items) {
this.items = items;
}

public List<OrderItem> getItems() {
return items;
}
}
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 getPrice() {
return price;
}

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

import yourssu.user.domain.User;

import java.util.List;

public class OrderAnalyticsService {


public double getAvgPrice(List<User> users) {
double avgPrice = users.stream()
.flatMap(user -> user.getOrders().stream())
.flatMap(order -> order.getItems().stream())
.mapToDouble(item -> item.getPrice() * item.getCount())
.average()
.orElse(0.0);

return avgPrice;
}
}
22 changes: 14 additions & 8 deletions src/main/java/yourssu/user/domain/User.java
Original file line number Diff line number Diff line change
@@ -1,16 +1,22 @@
package yourssu.user.domain;

import java.util.List;

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

public class User {
private final Long id;
private final String name;
private final List<Post> posts;

public User(Long id, String name, List<Post> posts) {
this.id = id;
this.name = name;
this.posts = posts;

private final List<Order> orders;



public User(List<Order> orders) {
this.orders = orders;
}

public List<Order> getOrders() {
return orders;
}
}
44 changes: 44 additions & 0 deletions src/test/java/yourssu/OrderAnalyticsServiceTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package yourssu;

import static org.assertj.core.api.Assertions.*;
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.User;

import java.util.List;

public class OrderAnalyticsServiceTest {

private final OrderAnalyticsService orderAnalyticsService = new OrderAnalyticsService();

@Test
void 평균_주문_금액을_구한다() {
// given
List<User> users = List.of(
new User(List.of(
new Order(List.of(
new OrderItem("A", 1000, 2),
new OrderItem("B", 1500, 1)
)),
new Order(List.of(
new OrderItem("C", 500, 3)
))
)),
new User(List.of(
new Order(List.of(
new OrderItem("D", 2000, 1),
new OrderItem("E", 800, 2)
))
))
);

// when
double testAvg = orderAnalyticsService.getAvgPrice(users);

// then

assertThat(testAvg).isEqualTo(1720.0);
}
}