diff --git a/src/main/java/com/devkor/ifive/nadab/domain/stats/application/AskChatStatsService.java b/src/main/java/com/devkor/ifive/nadab/domain/stats/application/AskChatStatsService.java index d77f22a4..82e41316 100644 --- a/src/main/java/com/devkor/ifive/nadab/domain/stats/application/AskChatStatsService.java +++ b/src/main/java/com/devkor/ifive/nadab/domain/stats/application/AskChatStatsService.java @@ -19,7 +19,6 @@ import com.devkor.ifive.nadab.domain.stats.core.dto.askchat.AskChatWalletStatsViewModel; import com.devkor.ifive.nadab.domain.stats.core.dto.askchat.AskChatWalletSummaryDto; import com.devkor.ifive.nadab.domain.stats.core.repository.AskChatStatsRepository; -import com.devkor.ifive.nadab.global.shared.util.TodayDateTimeProvider; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -38,19 +37,12 @@ @Transactional(readOnly = true) public class AskChatStatsService { - public static final int DEFAULT_CHART_DAYS = 7; - private static final ZoneId SEOUL = ZoneId.of("Asia/Seoul"); private static final DateTimeFormatter REFRESHED_AT_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); private final AskChatStatsRepository repository; - public AskChatStatsViewModel getAskChatStats() { - LocalDate endDate = TodayDateTimeProvider.getTodayDate(); - return getAskChatStats(endDate.minusDays(DEFAULT_CHART_DAYS - 1L), endDate); - } - public AskChatStatsViewModel getAskChatStats(LocalDate startDate, LocalDate endDate) { Objects.requireNonNull(startDate, "startDate must not be null"); Objects.requireNonNull(endDate, "endDate must not be null"); diff --git a/src/main/java/com/devkor/ifive/nadab/domain/stats/controller/StatsController.java b/src/main/java/com/devkor/ifive/nadab/domain/stats/controller/StatsController.java index 50f4323d..da1831b6 100644 --- a/src/main/java/com/devkor/ifive/nadab/domain/stats/controller/StatsController.java +++ b/src/main/java/com/devkor/ifive/nadab/domain/stats/controller/StatsController.java @@ -25,6 +25,7 @@ import com.devkor.ifive.nadab.domain.user.core.entity.InterestCode; import com.devkor.ifive.nadab.global.core.response.ErrorCode; import com.devkor.ifive.nadab.global.exception.BadRequestException; +import com.devkor.ifive.nadab.global.shared.util.TodayDateTimeProvider; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; @@ -57,10 +58,45 @@ public class StatsController { private final DailyQuestionOverviewCsvExporter dailyQuestionOverviewCsvExporter; @GetMapping("/stats/ask-chat") - public String askChatStats(Model model) { - AskChatStatsViewModel vm = askChatStatsService.getAskChatStats(); + public String askChatStats( + @RequestParam(defaultValue = "daily") String period, + @RequestParam(required = false) String date, + @RequestParam(required = false) String week, + @RequestParam(required = false) String month, + Model model + ) { + LocalDate startDate; + LocalDate endDate; + String periodValue; + switch (period) { + case "daily" -> { + startDate = StatsPeriodResolver.resolveDaily(date); + endDate = startDate; + periodValue = startDate.toString(); + } + case "weekly" -> { + startDate = StatsPeriodResolver.resolveWeekly(week); + endDate = startDate.plusDays(6); + periodValue = StatsPeriodResolver.formatIsoWeek(startDate); + } + case "monthly" -> { + YearMonth selectedMonth = StatsPeriodResolver.resolveMonthly(month); + startDate = selectedMonth.atDay(1); + endDate = selectedMonth.atEndOfMonth(); + periodValue = selectedMonth.toString(); + } + default -> throw new BadRequestException(ErrorCode.VALIDATION_FAILED); + } + LocalDate today = TodayDateTimeProvider.getTodayDate(); + if (endDate.isAfter(today)) { + endDate = today; + } + + AskChatStatsViewModel vm = askChatStatsService.getAskChatStats(startDate, endDate); model.addAttribute("vm", vm); model.addAttribute("activeTab", "ask-chat"); + model.addAttribute("period", period); + model.addAttribute("periodValue", periodValue); return "stats/ask-chat"; } diff --git a/src/main/resources/templates/stats/ask-chat.html b/src/main/resources/templates/stats/ask-chat.html index e80d7dae..5b4d74a4 100644 --- a/src/main/resources/templates/stats/ask-chat.html +++ b/src/main/resources/templates/stats/ask-chat.html @@ -3,7 +3,7 @@
-