diff --git a/src/main/java/com/moneymong/domain/ledger/api/response/report/LedgerReportResponse.java b/src/main/java/com/moneymong/domain/ledger/api/response/report/LedgerReportResponse.java index 8449a06..1459c80 100644 --- a/src/main/java/com/moneymong/domain/ledger/api/response/report/LedgerReportResponse.java +++ b/src/main/java/com/moneymong/domain/ledger/api/response/report/LedgerReportResponse.java @@ -13,9 +13,7 @@ public record LedgerReportResponse( Integer totalIncome, Integer totalExpense, Integer totalBalance, - List monthly, - List members, - List categories + List monthly ) { @Builder public record PeriodInfo( @@ -34,7 +32,9 @@ public record MonthlyReport( Integer expense, Integer netAmount, Double incomeShareOfPeriod, - Double expenseShareOfPeriod + Double expenseShareOfPeriod, + List members, + List categories ) { } diff --git a/src/main/java/com/moneymong/domain/ledger/service/reader/LedgerReportReader.java b/src/main/java/com/moneymong/domain/ledger/service/reader/LedgerReportReader.java index 4610825..0e4585c 100644 --- a/src/main/java/com/moneymong/domain/ledger/service/reader/LedgerReportReader.java +++ b/src/main/java/com/moneymong/domain/ledger/service/reader/LedgerReportReader.java @@ -58,11 +58,7 @@ public LedgerReportResponse getReport( // 기간 필터링 List filteredDetails = filterByPeriod(allDetails, startYear, startMonth, endYear, endMonth); - // 요청 기간 합계 (멤버별 share 계산용 - 기간 내 비율 의미 유지) - int periodIncome = calculateTotalByFundType(filteredDetails, FundType.INCOME); - int periodExpense = calculateTotalByFundType(filteredDetails, FundType.EXPENSE); - - // 월별 집계 (share 분모: 장부 전체 기간 합계) + // 월별 집계 (각 month 안에 members/categories 포함) List monthlyReports = generateMonthlyReports( filteredDetails, startYear, startMonth, @@ -71,12 +67,6 @@ public LedgerReportResponse getReport( totalExpense ); - // 멤버별 집계 (share 분모: 요청 기간 합계) - List memberReports = generateMemberReports(filteredDetails, periodIncome, periodExpense); - - // 카테고리별 집계 (share 분모: 장부 전체 기간 합계) - List categoryReports = generateCategoryReports(filteredDetails, totalIncome, totalExpense); - return LedgerReportResponse.builder() .agencyId(agencyId) .agencyName(agency.getAgencyName()) @@ -90,8 +80,6 @@ public LedgerReportResponse getReport( .totalExpense(totalExpense) .totalBalance(totalBalance) .monthly(monthlyReports) - .members(memberReports) - .categories(categoryReports) .build(); } @@ -172,6 +160,10 @@ private List generateMonthlyReports( double incomeShare = totalIncome > 0 ? (double) monthIncome / totalIncome : 0.0; double expenseShare = totalExpense > 0 ? (double) monthExpense / totalExpense : 0.0; + // 월별 멤버/카테고리 집계 (share 분모: 해당 월 합계) + List monthMembers = generateMemberReports(monthDetails, monthIncome, monthExpense); + List monthCategories = generateCategoryReports(monthDetails, monthIncome, monthExpense); + reports.add(MonthlyReport.builder() .year(year) .month(month) @@ -180,6 +172,8 @@ private List generateMonthlyReports( .netAmount(netAmount) .incomeShareOfPeriod(incomeShare) .expenseShareOfPeriod(expenseShare) + .members(monthMembers) + .categories(monthCategories) .build()); current = current.plusMonths(1);