From 8e104b1b2a7fc2b1584f14248843f96b36c18a73 Mon Sep 17 00:00:00 2001 From: pott-101 Date: Sun, 24 May 2026 16:07:10 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EC=9E=A5=EB=B6=80=20=ED=86=B5=ED=95=A9?= =?UTF-8?q?=20report=EC=9D=98=20members/categories=EB=A5=BC=20=EC=9B=94?= =?UTF-8?q?=EB=B3=84=EB=A1=9C=20=EC=9D=91=EB=8B=B5=ED=95=9C=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 최상위 members/categories 필드 제거 - MonthlyReport 내부에 members/categories 필드 추가 - 월별 멤버/카테고리의 share 분모는 해당 월 합계 기준 Co-Authored-By: Claude Opus 4.7 --- .../response/report/LedgerReportResponse.java | 8 ++++---- .../service/reader/LedgerReportReader.java | 20 +++++++------------ 2 files changed, 11 insertions(+), 17 deletions(-) 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);