-
Notifications
You must be signed in to change notification settings - Fork 17
/
Copy pathTripExpenseResponse.java
64 lines (56 loc) · 2.14 KB
/
TripExpenseResponse.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
62
63
64
package hanglog.expense.dto.response;
import hanglog.city.domain.City;
import hanglog.city.dto.response.CityResponse;
import hanglog.currency.domain.Currency;
import hanglog.expense.domain.Amount;
import hanglog.expense.domain.CategoryExpense;
import hanglog.expense.domain.DayLogExpense;
import hanglog.trip.domain.Trip;
import hanglog.trip.domain.TripCity;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
@Getter
@RequiredArgsConstructor
public class TripExpenseResponse {
private final Long id;
private final String title;
private final LocalDate startDate;
private final LocalDate endDate;
private final List<CityResponse> cities;
private final BigDecimal totalAmount;
private final List<CategoryExpenseResponse> categories;
private final ExchangeRateResponse exchangeRate;
private final List<DayLogExpenseResponse> dayLogs;
public static TripExpenseResponse of(
final Trip trip,
final Amount totalAmount,
final List<TripCity> tripCities,
final List<CategoryExpense> categoryExpenses,
final Currency currency,
final List<DayLogExpense> dayLogExpenses
) {
final List<CityResponse> cityExpenseResponses = tripCities.stream()
.map(tripCity -> CityResponse.of(tripCity.getCity()))
.toList();
final List<CategoryExpenseResponse> categoryExpenseResponses = categoryExpenses.stream()
.map(CategoryExpenseResponse::of)
.toList();
final List<DayLogExpenseResponse> dayLogExpenseResponses = dayLogExpenses.stream()
.map(DayLogExpenseResponse::of)
.toList();
return new TripExpenseResponse(
trip.getId(),
trip.getTitle(),
trip.getStartDate(),
trip.getEndDate(),
cityExpenseResponses,
totalAmount.getValue(),
categoryExpenseResponses,
ExchangeRateResponse.of(currency),
dayLogExpenseResponses
);
}
}