From 042a747d8e48ff21296baa7b9e9d9f0c892d057e Mon Sep 17 00:00:00 2001 From: 1Seob Date: Mon, 24 Aug 2026 16:05:04 +0900 Subject: [PATCH] =?UTF-8?q?fix(stats):=20=EC=9D=BC=EA=B0=84=20=ED=86=B5?= =?UTF-8?q?=EA=B3=84=20=ED=98=84=EC=9E=AC=20=EA=B3=B5=EC=9C=A0=20=EB=A6=AC?= =?UTF-8?q?=ED=8F=AC=ED=8A=B8=20=EC=B9=B4=EB=93=9C=20=EB=B3=B5=EA=B5=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 상단 KPI는 오늘 기준 공유 수를 표시하고 하단 기간 요약은 선택 날짜 기준을 유지하도록 집계를 분리함 --- .../nadab/domain/stats/application/DailyStatsService.java | 8 ++++++-- .../domain/stats/core/dto/daily/DailyStatsViewModel.java | 1 + src/main/resources/templates/stats/daily.html | 8 ++++++++ .../domain/stats/application/DailyStatsServiceTest.java | 4 ++++ .../stats/controller/StatsControllerTemplateTest.java | 5 +++++ 5 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/devkor/ifive/nadab/domain/stats/application/DailyStatsService.java b/src/main/java/com/devkor/ifive/nadab/domain/stats/application/DailyStatsService.java index 307bf53c..f8f1b03a 100644 --- a/src/main/java/com/devkor/ifive/nadab/domain/stats/application/DailyStatsService.java +++ b/src/main/java/com/devkor/ifive/nadab/domain/stats/application/DailyStatsService.java @@ -74,15 +74,18 @@ public DailyStatsViewModel getDailyStats(LocalDate selectedDate) { ); int selectedIndex = days.size() - 1; - long sharedDailyReportCount = repo.countSharedDailyReports(selectedDate); + long selectedDateSharedDailyReportCount = repo.countSharedDailyReports(selectedDate); DailyPeriodStatsViewModel selectedPeriod = new DailyPeriodStatsViewModel( selectedDate.toString(), selectedDate.toString(), signupCounts.get(selectedIndex), assignedCounts.get(selectedIndex), completedCounts.get(selectedIndex), - sharedDailyReportCount + selectedDateSharedDailyReportCount ); + long sharedDailyReportCount = selectedDate.equals(today) + ? selectedDateSharedDailyReportCount + : repo.countSharedDailyReports(today); return new DailyStatsViewModel( labels, @@ -93,6 +96,7 @@ public DailyStatsViewModel getDailyStats(LocalDate selectedDate) { signupPeak, assignedQuestionPeak, dauPeak, + sharedDailyReportCount, OffsetDateTime.now(SEOUL).format(FMT) ); } diff --git a/src/main/java/com/devkor/ifive/nadab/domain/stats/core/dto/daily/DailyStatsViewModel.java b/src/main/java/com/devkor/ifive/nadab/domain/stats/core/dto/daily/DailyStatsViewModel.java index 07f801f2..76c15a29 100644 --- a/src/main/java/com/devkor/ifive/nadab/domain/stats/core/dto/daily/DailyStatsViewModel.java +++ b/src/main/java/com/devkor/ifive/nadab/domain/stats/core/dto/daily/DailyStatsViewModel.java @@ -13,5 +13,6 @@ public record DailyStatsViewModel( PeakStatViewModel signupPeak, PeakStatViewModel assignedQuestionPeak, PeakStatViewModel dauPeak, + long sharedDailyReportCount, String refreshedAt // "2026-02-27 21:34:12" ) {} diff --git a/src/main/resources/templates/stats/daily.html b/src/main/resources/templates/stats/daily.html index e34109c6..59136b84 100644 --- a/src/main/resources/templates/stats/daily.html +++ b/src/main/resources/templates/stats/daily.html @@ -290,6 +290,14 @@ th:href="@{/stats/total}">전체 + +
+
+
현재 공유 중인 일간 리포트
+
0
+
+
+
diff --git a/src/test/java/com/devkor/ifive/nadab/domain/stats/application/DailyStatsServiceTest.java b/src/test/java/com/devkor/ifive/nadab/domain/stats/application/DailyStatsServiceTest.java index 75e178d5..60f100c9 100644 --- a/src/test/java/com/devkor/ifive/nadab/domain/stats/application/DailyStatsServiceTest.java +++ b/src/test/java/com/devkor/ifive/nadab/domain/stats/application/DailyStatsServiceTest.java @@ -37,6 +37,7 @@ void getDailyStats_anchors_chart_and_summary_to_selected_date() { when(repo.findCompletedDailyReportCountsLast7Days(startDate, selectedDate)) .thenReturn(List.of(new DateCountDto(selectedDate, 9L))); when(repo.countSharedDailyReports(selectedDate)).thenReturn(2L); + when(repo.countSharedDailyReports(today)).thenReturn(4L); DailyStatsViewModel vm = service.getDailyStats(selectedDate); @@ -51,9 +52,12 @@ void getDailyStats_anchors_chart_and_summary_to_selected_date() { assertThat(vm.selectedPeriod().assignedQuestionCount()).isEqualTo(7L); assertThat(vm.selectedPeriod().dauCount()).isEqualTo(9L); assertThat(vm.selectedPeriod().sharedDailyReportCount()).isEqualTo(2L); + assertThat(vm.sharedDailyReportCount()).isEqualTo(4L); verify(repo).findSignupCountsLast7Days(startDate, selectedDate); verify(repo).findAssignedQuestionCountsLast7Days(startDate, selectedDate); verify(repo).findCompletedDailyReportCountsLast7Days(startDate, selectedDate); + verify(repo).countSharedDailyReports(selectedDate); + verify(repo).countSharedDailyReports(today); } } diff --git a/src/test/java/com/devkor/ifive/nadab/domain/stats/controller/StatsControllerTemplateTest.java b/src/test/java/com/devkor/ifive/nadab/domain/stats/controller/StatsControllerTemplateTest.java index 432847d1..4a6a861e 100644 --- a/src/test/java/com/devkor/ifive/nadab/domain/stats/controller/StatsControllerTemplateTest.java +++ b/src/test/java/com/devkor/ifive/nadab/domain/stats/controller/StatsControllerTemplateTest.java @@ -73,6 +73,7 @@ void dailyStats_renders_peak_value_period_current_badge_and_empty_state() throws currentPeak, pastPeak, PeakStatViewModel.empty(), + 4_321L, "2026-08-13 12:00:00" )); @@ -86,6 +87,8 @@ void dailyStats_renders_peak_value_period_current_badge_and_empty_state() throws .andExpect(content().string(containsString("value=\"2026-08-13\""))) .andExpect(content().string(containsString("할당된 질문 수"))) .andExpect(content().string(containsString("DAU · 일간 리포트 작성자"))) + .andExpect(content().string(containsString("현재 공유 중인 일간 리포트"))) + .andExpect(content().string(containsString("4,321"))) .andExpect(content().string(containsString("공유 중인 일간 리포트"))) .andExpect(content().string(containsString("역대 최고"))) .andExpect(content().string(containsString("1,234"))) @@ -94,6 +97,8 @@ void dailyStats_renders_peak_value_period_current_badge_and_empty_state() throws .andExpect(content().string(containsString("기록 없음"))) .andReturn().getResponse().getContentAsString(); + assertThat(html.indexOf("현재 공유 중인 일간 리포트")) + .isLessThan(html.indexOf("