From bc85495f1755626b2259e1548b8796f269906538 Mon Sep 17 00:00:00 2001 From: ekgns33 Date: Wed, 30 Apr 2025 20:32:43 +0900 Subject: [PATCH 1/5] :sparkles: feat : update query to return RecordStatDto list --- .../records/repository/RecordRepository.java | 13 ++++---- .../runimo/records/service/dto/DailyStat.java | 32 ++++++++++++++++--- .../records/service/dto/RecordStatDto.java | 20 ++++++++++++ 3 files changed, 55 insertions(+), 10 deletions(-) create mode 100644 src/main/java/org/runimo/runimo/records/service/dto/RecordStatDto.java diff --git a/src/main/java/org/runimo/runimo/records/repository/RecordRepository.java b/src/main/java/org/runimo/runimo/records/repository/RecordRepository.java index 9e608626..151f2068 100644 --- a/src/main/java/org/runimo/runimo/records/repository/RecordRepository.java +++ b/src/main/java/org/runimo/runimo/records/repository/RecordRepository.java @@ -4,7 +4,7 @@ import java.util.List; import java.util.Optional; import org.runimo.runimo.records.domain.RunningRecord; -import org.runimo.runimo.records.service.dto.DailyStat; +import org.runimo.runimo.records.service.dto.RecordStatDto; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; import org.springframework.data.jpa.repository.JpaRepository; @@ -33,14 +33,15 @@ Slice findFirstRunOfWeek( @Query("select r from RunningRecord r where r.userId = :userId") Slice findLatestByUserId(Long userId, Pageable pageRequest); - @Query("select new org.runimo.runimo.records.service.dto.DailyStat(" + - "cast(r.startedAt as localdate), " + - "sum(r.totalDistance.amount)) " + + @Query("select new org.runimo.runimo.records.service.dto.RecordStatDto(" + + "r.startedAt, " + + "r.endAt, " + + "r.totalDistance.amount) " + "from RunningRecord r " + "where r.userId = :userId " + "and r.startedAt between :startOfWeek and :now " + - "group by function('date', r.startedAt)") - List findDailyDistanceByUserIdAndThisWeek(Long userId, LocalDateTime startOfWeek, + "order by r.startedAt asc") + List findRecordStatByUserIdAndBetween(Long userId, LocalDateTime startOfWeek, LocalDateTime now); List findRecordByUserIdOrderByStartedAtDesc(Long id, Pageable pageable); diff --git a/src/main/java/org/runimo/runimo/records/service/dto/DailyStat.java b/src/main/java/org/runimo/runimo/records/service/dto/DailyStat.java index eca63246..13beffc1 100644 --- a/src/main/java/org/runimo/runimo/records/service/dto/DailyStat.java +++ b/src/main/java/org/runimo/runimo/records/service/dto/DailyStat.java @@ -1,12 +1,36 @@ package org.runimo.runimo.records.service.dto; +import com.fasterxml.jackson.annotation.JsonIgnore; import java.time.LocalDate; +import java.time.temporal.ChronoUnit; +import lombok.Getter; -public record DailyStat( - LocalDate date, - Long distance -) { +@Getter +public class DailyStat { + private LocalDate date; + @JsonIgnore + private Long timeInSeconds; + @JsonIgnore + private Long runningCount; + private Long distanceInMeters; + + public DailyStat(LocalDate date, Long timeInSeconds, Long runningCount, Long distanceInMeters) { + this.date = date; + this.timeInSeconds = timeInSeconds; + this.runningCount = runningCount; + this.distanceInMeters = distanceInMeters; + } + + public void addData(RecordStatDto recordStat) { + this.timeInSeconds += recordStat.getStartedAt().until(recordStat.getEndAt(), ChronoUnit.SECONDS); + this.runningCount += 1; + this.distanceInMeters += recordStat.getRunningDistanceInMeters(); + } + + public static DailyStat empty(LocalDate date) { + return new DailyStat(date, 0L, 0L, 0L); + } } diff --git a/src/main/java/org/runimo/runimo/records/service/dto/RecordStatDto.java b/src/main/java/org/runimo/runimo/records/service/dto/RecordStatDto.java new file mode 100644 index 00000000..639e3c6b --- /dev/null +++ b/src/main/java/org/runimo/runimo/records/service/dto/RecordStatDto.java @@ -0,0 +1,20 @@ +package org.runimo.runimo.records.service.dto; + +import java.time.LocalDateTime; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class RecordStatDto { + private LocalDateTime startedAt; + private LocalDateTime endAt; + private Long runningDistanceInMeters; + + public RecordStatDto(LocalDateTime startedAt, LocalDateTime endAt, Long runningDistanceInMeters) { + this.startedAt = startedAt; + this.endAt = endAt; + this.runningDistanceInMeters = runningDistanceInMeters; + } +} From e71bbce30816e6c16412e006c20bc80ae8c8720c Mon Sep 17 00:00:00 2001 From: ekgns33 Date: Wed, 30 Apr 2025 20:33:34 +0900 Subject: [PATCH 2/5] :sparkles: feat : map RecordStat to SimpleStat --- .../runimo/records/service/RecordFinder.java | 23 ++++++++++++- .../records/service/dto/SimpleStat.java | 33 +++++++++++++++++++ .../usecases/RecordQueryUsecaseImpl.java | 10 ++++-- 3 files changed, 63 insertions(+), 3 deletions(-) create mode 100644 src/main/java/org/runimo/runimo/records/service/dto/SimpleStat.java diff --git a/src/main/java/org/runimo/runimo/records/service/RecordFinder.java b/src/main/java/org/runimo/runimo/records/service/RecordFinder.java index f8552ba9..5bdb6577 100644 --- a/src/main/java/org/runimo/runimo/records/service/RecordFinder.java +++ b/src/main/java/org/runimo/runimo/records/service/RecordFinder.java @@ -1,6 +1,7 @@ package org.runimo.runimo.records.service; import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.List; import java.util.Optional; import lombok.RequiredArgsConstructor; @@ -8,6 +9,7 @@ import org.runimo.runimo.records.repository.RecordRepository; import org.runimo.runimo.records.service.dto.DailyStat; import org.runimo.runimo.records.service.dto.RecordSimpleView; +import org.runimo.runimo.records.service.dto.RecordStatDto; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; @@ -54,7 +56,8 @@ public Optional findLatestRunningRecordByUserId(Long userId) { @Transactional(readOnly = true) public List findDailyStatByUserIdBetween(Long id, LocalDateTime from, LocalDateTime to) { - return recordRepository.findDailyDistanceByUserIdAndThisWeek(id, from, to); + return mapToDailyStatList( + recordRepository.findRecordStatByUserIdAndBetween(id, from, to)); } @Transactional(readOnly = true) @@ -66,4 +69,22 @@ public List findRecordSimpleViewByUserId(Long id, int page, in .map(RecordSimpleView::from) .toList(); } + + private List mapToDailyStatList(List recordStatDtos) { + List list = new ArrayList<>(); + for (RecordStatDto recordStatDto : recordStatDtos) { + if (list.isEmpty() || list.getLast().getDate() != recordStatDto.getStartedAt() + .toLocalDate()) { + DailyStat dailyStat = DailyStat.empty(recordStatDto.getStartedAt().toLocalDate()); + dailyStat.addData(recordStatDto); + list.add(dailyStat); + continue; + } + DailyStat last = list.getLast(); + last.addData(recordStatDto); + } + return list; + } + + } diff --git a/src/main/java/org/runimo/runimo/records/service/dto/SimpleStat.java b/src/main/java/org/runimo/runimo/records/service/dto/SimpleStat.java new file mode 100644 index 00000000..2c7187e2 --- /dev/null +++ b/src/main/java/org/runimo/runimo/records/service/dto/SimpleStat.java @@ -0,0 +1,33 @@ +package org.runimo.runimo.records.service.dto; + +import java.util.List; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class SimpleStat { + + Long totalTimeInSeconds; + Long totalRunningCount; + Long totalDistanceInMeters; + + private SimpleStat(Long totalTimeInSeconds, Long totalRunningCount, Long totalDistanceInMeters) { + this.totalTimeInSeconds = totalTimeInSeconds; + this.totalRunningCount = totalRunningCount; + this.totalDistanceInMeters = totalDistanceInMeters; + } + + + + public static SimpleStat from(List dailyStats) { + SimpleStat simpleStat = new SimpleStat(0L, 0L, 0L); + for (DailyStat dailyStat : dailyStats) { + simpleStat.totalTimeInSeconds += dailyStat.getTimeInSeconds(); + simpleStat.totalRunningCount += dailyStat.getRunningCount(); + simpleStat.totalDistanceInMeters += dailyStat.getDistanceInMeters(); + } + return simpleStat; + } +} diff --git a/src/main/java/org/runimo/runimo/records/service/usecases/RecordQueryUsecaseImpl.java b/src/main/java/org/runimo/runimo/records/service/usecases/RecordQueryUsecaseImpl.java index 660e1460..ed12e191 100644 --- a/src/main/java/org/runimo/runimo/records/service/usecases/RecordQueryUsecaseImpl.java +++ b/src/main/java/org/runimo/runimo/records/service/usecases/RecordQueryUsecaseImpl.java @@ -10,6 +10,7 @@ import org.runimo.runimo.records.service.dto.DailyStat; import org.runimo.runimo.records.service.dto.RecordSimpleView; import org.runimo.runimo.records.service.dto.RecordSimpleViewResponse; +import org.runimo.runimo.records.service.dto.SimpleStat; import org.runimo.runimo.records.service.dto.WeeklyRecordStatResponse; import org.runimo.runimo.records.service.dto.WeeklyStatQuery; import org.runimo.runimo.records.service.usecases.dtos.MonthlyRecordStatResponse; @@ -33,12 +34,16 @@ public RecordDetailViewResponse getRecordDetailView(Long recordId) { @Override public WeeklyRecordStatResponse getUserWeeklyRecordStat(WeeklyStatQuery query) { // DB에서 일별로 이미 합산된 데이터 조회 + List dailyDistances = recordFinder.findDailyStatByUserIdBetween( query.userId(), query.startDate().atStartOfDay(), query.endDate().atTime(23, 59, 59) ); - return new WeeklyRecordStatResponse(dailyDistances); + + SimpleStat weeklyStat = SimpleStat.from(dailyDistances); + + return new WeeklyRecordStatResponse(weeklyStat, dailyDistances); } @Override @@ -50,7 +55,8 @@ public MonthlyRecordStatResponse getUserMonthlyRecordStat(MonthlyStatQuery query from.atStartOfDay(), to.atTime(23, 59, 59) ); - return new MonthlyRecordStatResponse(dailyDistances); + SimpleStat monthlyStat = SimpleStat.from(dailyDistances); + return new MonthlyRecordStatResponse(monthlyStat, dailyDistances); } @Override From 91304b83fbae6ccb8f8eb5583af5a1b6f33bbdbf Mon Sep 17 00:00:00 2001 From: ekgns33 Date: Wed, 30 Apr 2025 20:33:55 +0900 Subject: [PATCH 3/5] :sparkles: feat :add simple stat to StatResponses --- .../runimo/records/service/dto/WeeklyRecordStatResponse.java | 1 + .../service/usecases/dtos/MonthlyRecordStatResponse.java | 2 ++ 2 files changed, 3 insertions(+) diff --git a/src/main/java/org/runimo/runimo/records/service/dto/WeeklyRecordStatResponse.java b/src/main/java/org/runimo/runimo/records/service/dto/WeeklyRecordStatResponse.java index 90728c55..29b440dd 100644 --- a/src/main/java/org/runimo/runimo/records/service/dto/WeeklyRecordStatResponse.java +++ b/src/main/java/org/runimo/runimo/records/service/dto/WeeklyRecordStatResponse.java @@ -5,6 +5,7 @@ @Schema(name = "주간 통계 응답") public record WeeklyRecordStatResponse( + SimpleStat simpleStat, List dailyStats ) { diff --git a/src/main/java/org/runimo/runimo/records/service/usecases/dtos/MonthlyRecordStatResponse.java b/src/main/java/org/runimo/runimo/records/service/usecases/dtos/MonthlyRecordStatResponse.java index 24b119e1..40baebcb 100644 --- a/src/main/java/org/runimo/runimo/records/service/usecases/dtos/MonthlyRecordStatResponse.java +++ b/src/main/java/org/runimo/runimo/records/service/usecases/dtos/MonthlyRecordStatResponse.java @@ -2,8 +2,10 @@ import java.util.List; import org.runimo.runimo.records.service.dto.DailyStat; +import org.runimo.runimo.records.service.dto.SimpleStat; public record MonthlyRecordStatResponse( + SimpleStat simpleStat, List dailyStats ) { From fd4a605c71920836be30c0b07987d9f35744836a Mon Sep 17 00:00:00 2001 From: ekgns33 Date: Wed, 30 Apr 2025 20:35:03 +0900 Subject: [PATCH 4/5] :white_check_mark: test : apply SimpleStat to testcode --- .../records/api/RecordAcceptanceTest.java | 36 +++++--- .../usecases/RecordQueryUsecaseImplTest.java | 88 +++++++++---------- 2 files changed, 62 insertions(+), 62 deletions(-) diff --git a/src/test/java/org/runimo/runimo/records/api/RecordAcceptanceTest.java b/src/test/java/org/runimo/runimo/records/api/RecordAcceptanceTest.java index 8a552e83..c2f89735 100644 --- a/src/test/java/org/runimo/runimo/records/api/RecordAcceptanceTest.java +++ b/src/test/java/org/runimo/runimo/records/api/RecordAcceptanceTest.java @@ -159,19 +159,19 @@ void tearDown() { .body("code", equalTo("MY_PAGE_DATA_FETCHED")) .body("payload.daily_stats.size()", equalTo(7)) .body("payload.daily_stats[0].date", equalTo("2025-03-31")) - .body("payload.daily_stats[0].distance", equalTo(1000)) + .body("payload.daily_stats[0].distance_in_meters", equalTo(1000)) .body("payload.daily_stats[1].date", equalTo("2025-04-01")) - .body("payload.daily_stats[1].distance", equalTo(2000)) + .body("payload.daily_stats[1].distance_in_meters", equalTo(2000)) .body("payload.daily_stats[2].date", equalTo("2025-04-02")) - .body("payload.daily_stats[2].distance", equalTo(3000)) + .body("payload.daily_stats[2].distance_in_meters", equalTo(3000)) .body("payload.daily_stats[3].date", equalTo("2025-04-03")) - .body("payload.daily_stats[3].distance", equalTo(4000)) + .body("payload.daily_stats[3].distance_in_meters", equalTo(4000)) .body("payload.daily_stats[4].date", equalTo("2025-04-04")) - .body("payload.daily_stats[4].distance", equalTo(5000)) + .body("payload.daily_stats[4].distance_in_meters", equalTo(5000)) .body("payload.daily_stats[5].date", equalTo("2025-04-05")) - .body("payload.daily_stats[5].distance", equalTo(6000)) + .body("payload.daily_stats[5].distance_in_meters", equalTo(6000)) .body("payload.daily_stats[6].date", equalTo("2025-04-06")) - .body("payload.daily_stats[6].distance", equalTo(7000)); + .body("payload.daily_stats[6].distance_in_meters", equalTo(7000)); } @Test @@ -192,17 +192,21 @@ void tearDown() { .log().ifValidationFails() .statusCode(200) .body("code", equalTo("MY_PAGE_DATA_FETCHED")) + .body("payload.simple_stat", notNullValue()) + .body("payload.simple_stat.total_time_in_seconds", equalTo(18000)) + .body("payload.simple_stat.total_running_count", equalTo(5)) + .body("payload.simple_stat.total_distance_in_meters", equalTo(21000)) .body("payload.daily_stats.size()", equalTo(5)) .body("payload.daily_stats[0].date", equalTo("2025-03-31")) - .body("payload.daily_stats[0].distance", equalTo(1000)) + .body("payload.daily_stats[0].distance_in_meters", equalTo(1000)) .body("payload.daily_stats[1].date", equalTo("2025-04-01")) - .body("payload.daily_stats[1].distance", equalTo(2000)) + .body("payload.daily_stats[1].distance_in_meters", equalTo(2000)) .body("payload.daily_stats[2].date", equalTo("2025-04-04")) - .body("payload.daily_stats[2].distance", equalTo(5000)) + .body("payload.daily_stats[2].distance_in_meters", equalTo(5000)) .body("payload.daily_stats[3].date", equalTo("2025-04-05")) - .body("payload.daily_stats[3].distance", equalTo(6000)) + .body("payload.daily_stats[3].distance_in_meters", equalTo(6000)) .body("payload.daily_stats[4].date", equalTo("2025-04-06")) - .body("payload.daily_stats[4].distance", equalTo(7000)); + .body("payload.daily_stats[4].distance_in_meters", equalTo(7000)); } @Test @@ -224,11 +228,15 @@ void tearDown() { .log().all() .statusCode(200) .body("code", equalTo("MY_PAGE_DATA_FETCHED")) + .body("payload.simple_stat", notNullValue()) + .body("payload.simple_stat.total_time_in_seconds", equalTo(21600)) + .body("payload.simple_stat.total_running_count", equalTo(6)) + .body("payload.simple_stat.total_distance_in_meters", equalTo(27000)) .body("payload.daily_stats.size()", equalTo(6)) .body("payload.daily_stats[0].date", equalTo("2025-04-01")) - .body("payload.daily_stats[0].distance", equalTo(2000)) + .body("payload.daily_stats[0].distance_in_meters", equalTo(2000)) .body("payload.daily_stats[1].date", equalTo("2025-04-02")) - .body("payload.daily_stats[1].distance", equalTo(3000)); + .body("payload.daily_stats[1].distance_in_meters", equalTo(3000)); } @Test diff --git a/src/test/java/org/runimo/runimo/records/service/usecases/RecordQueryUsecaseImplTest.java b/src/test/java/org/runimo/runimo/records/service/usecases/RecordQueryUsecaseImplTest.java index 7dca2468..1c28c3cb 100644 --- a/src/test/java/org/runimo/runimo/records/service/usecases/RecordQueryUsecaseImplTest.java +++ b/src/test/java/org/runimo/runimo/records/service/usecases/RecordQueryUsecaseImplTest.java @@ -6,7 +6,6 @@ import static org.mockito.Mockito.when; import static org.mockito.MockitoAnnotations.openMocks; -import java.time.DayOfWeek; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.List; @@ -36,19 +35,27 @@ void setUp() { @Test void 주간_일별_달리기_거리_합() { // given - LocalDateTime now = LocalDateTime.of(2025, 4, 6, 10, 0); - LocalDateTime startOfWeek = now.with(DayOfWeek.MONDAY).withHour(0).withMinute(0) - .withSecond(0); - List savedData = List.of( - new DailyStat(LocalDate.of(2025, 3, 31), 1000L), // 월 - new DailyStat(LocalDate.of(2025, 4, 1), 2000L), // 화 - new DailyStat(LocalDate.of(2025, 4, 2), 3000L), // 수 - new DailyStat(LocalDate.of(2025, 4, 3), 4000L), // 목 - new DailyStat(LocalDate.of(2025, 4, 4), 5000L), // 금 - new DailyStat(LocalDate.of(2025, 4, 5), 6000L), // 토 - new DailyStat(LocalDate.of(2025, 4, 6), 7000L) // 일 + new DailyStat(LocalDate.of(2025, 3, 31), 20L, 1L, 1000L), // 월 + new DailyStat(LocalDate.of(2025, 4, 1), 20L, 1L, 2000L), // 화 + new DailyStat(LocalDate.of(2025, 4, 2), 20L, 1L, 3000L), // 수 + new DailyStat(LocalDate.of(2025, 4, 3), 20L, 1L, 4000L), // 목 + new DailyStat(LocalDate.of(2025, 4, 4), 20L, 1L, 5000L), // 금 + new DailyStat(LocalDate.of(2025, 4, 5), 20L, 1L, 6000L), // 토 + new DailyStat(LocalDate.of(2025, 4, 6), 20L, 1L, 7000L) // 일 ); + Long expectedDistanceSum = savedData.stream().map(DailyStat::getDistanceInMeters) + .reduce(0L, Long::sum); + Long expectedRunningCount = savedData.stream().map(DailyStat::getRunningCount) + .reduce(0L, Long::sum); + + when(recordFinder.findDailyStatByUserIdBetween(eq(1L), any(LocalDateTime.class), + any(LocalDateTime.class))) + .thenReturn(savedData); + + when(recordFinder.findDailyStatByUserIdBetween(eq(1L), any(LocalDateTime.class), + any(LocalDateTime.class))) + .thenReturn(savedData); when(recordFinder.findDailyStatByUserIdBetween(eq(1L), any(LocalDateTime.class), any(LocalDateTime.class))) @@ -63,34 +70,26 @@ void setUp() { )); // then - List expectedDistances = List.of( - new DailyStat(LocalDate.of(2025, 3, 31), 1000L), - new DailyStat(LocalDate.of(2025, 4, 1), 2000L), - new DailyStat(LocalDate.of(2025, 4, 2), 3000L), - new DailyStat(LocalDate.of(2025, 4, 3), 4000L), - new DailyStat(LocalDate.of(2025, 4, 4), 5000L), - new DailyStat(LocalDate.of(2025, 4, 5), 6000L), - new DailyStat(LocalDate.of(2025, 4, 6), 7000L) - ); - - assertEquals(expectedDistances, response.dailyStats()); + assertEquals(expectedDistanceSum, response.simpleStat().getTotalDistanceInMeters()); + assertEquals(expectedRunningCount, response.simpleStat().getTotalRunningCount()); } @Test void 주간_일별_달리기_거리_합_데이터가_없는_요일이_있을때() { // given - LocalDateTime now = LocalDateTime.of(2025, 4, 6, 10, 0); - LocalDateTime startOfWeek = now.with(DayOfWeek.MONDAY).withHour(0).withMinute(0) - .withSecond(0); - List savedData = List.of( - new DailyStat(LocalDate.of(2025, 3, 31), 1000L), // 월 - new DailyStat(LocalDate.of(2025, 4, 1), 9000L), // 화 - new DailyStat(LocalDate.of(2025, 4, 4), 5000L), // 금 - new DailyStat(LocalDate.of(2025, 4, 5), 6000L), // 토 - new DailyStat(LocalDate.of(2025, 4, 6), 7000L) // 일 + new DailyStat(LocalDate.of(2025, 3, 31), 20L, 1L, 1000L), // 월 + new DailyStat(LocalDate.of(2025, 4, 1), 20L, 3L, 9000L), // 화 + new DailyStat(LocalDate.of(2025, 4, 4), 20L, 1L, 5000L), // 금 + new DailyStat(LocalDate.of(2025, 4, 5), 20L, 5L, 6000L), // 토 + new DailyStat(LocalDate.of(2025, 4, 6), 20L, 1L, 7000L) // 일 ); + Long expectedDistanceSum = savedData.stream().map(DailyStat::getDistanceInMeters) + .reduce(0L, Long::sum); + Long expectedRunningCount = savedData.stream().map(DailyStat::getRunningCount) + .reduce(0L, Long::sum); + when(recordFinder.findDailyStatByUserIdBetween(eq(1L), any(LocalDateTime.class), any(LocalDateTime.class))) .thenReturn(savedData); @@ -104,15 +103,8 @@ void setUp() { )); // then - List expectedDistances = List.of( - new DailyStat(LocalDate.of(2025, 3, 31), 1000L), - new DailyStat(LocalDate.of(2025, 4, 1), 9000L), - new DailyStat(LocalDate.of(2025, 4, 4), 5000L), - new DailyStat(LocalDate.of(2025, 4, 5), 6000L), - new DailyStat(LocalDate.of(2025, 4, 6), 7000L) - ); - - assertEquals(expectedDistances, response.dailyStats()); + assertEquals(expectedDistanceSum, response.simpleStat().getTotalDistanceInMeters()); + assertEquals(expectedRunningCount, response.simpleStat().getTotalRunningCount()); } @Test @@ -121,12 +113,12 @@ void setUp() { MonthlyStatQuery query = new MonthlyStatQuery(1L, 2025, 4); List savedData = List.of( - new DailyStat(LocalDate.of(2025, 4, 1), 2000L), // 화 - new DailyStat(LocalDate.of(2025, 4, 2), 3000L), // 수 - new DailyStat(LocalDate.of(2025, 4, 3), 4000L), // 목 - new DailyStat(LocalDate.of(2025, 4, 4), 5000L), // 금 - new DailyStat(LocalDate.of(2025, 4, 5), 6000L), // 토 - new DailyStat(LocalDate.of(2025, 4, 6), 7000L) // 일 + new DailyStat(LocalDate.of(2025, 4, 1), 20L, 1L, 2000L), // 화 + new DailyStat(LocalDate.of(2025, 4, 2), 20L, 1L, 3000L), // 수 + new DailyStat(LocalDate.of(2025, 4, 3), 20L, 1L, 4000L), // 목 + new DailyStat(LocalDate.of(2025, 4, 4), 20L, 1L, 5000L), // 금 + new DailyStat(LocalDate.of(2025, 4, 5), 20L, 1L, 6000L), // 토 + new DailyStat(LocalDate.of(2025, 4, 6), 20L, 1L, 7000L) // 일 ); when(recordFinder.findDailyStatByUserIdBetween(eq(1L), any(LocalDateTime.class), @@ -138,6 +130,6 @@ void setUp() { // then assertEquals(savedData.size(), res.dailyStats().size()); - assertEquals(2000L, res.dailyStats().getFirst().distance()); + assertEquals(2000L, res.dailyStats().getFirst().getDistanceInMeters()); } } \ No newline at end of file From e40da5a13a434ff6157d635c742afc9bb354fdcc Mon Sep 17 00:00:00 2001 From: ekgns33 Date: Thu, 1 May 2025 13:59:30 +0900 Subject: [PATCH 5/5] :recycle: refactor : remove comment --- .../runimo/records/service/usecases/RecordQueryUsecaseImpl.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/org/runimo/runimo/records/service/usecases/RecordQueryUsecaseImpl.java b/src/main/java/org/runimo/runimo/records/service/usecases/RecordQueryUsecaseImpl.java index ed12e191..9ce291b2 100644 --- a/src/main/java/org/runimo/runimo/records/service/usecases/RecordQueryUsecaseImpl.java +++ b/src/main/java/org/runimo/runimo/records/service/usecases/RecordQueryUsecaseImpl.java @@ -33,8 +33,6 @@ public RecordDetailViewResponse getRecordDetailView(Long recordId) { @Override public WeeklyRecordStatResponse getUserWeeklyRecordStat(WeeklyStatQuery query) { - // DB에서 일별로 이미 합산된 데이터 조회 - List dailyDistances = recordFinder.findDailyStatByUserIdBetween( query.userId(), query.startDate().atStartOfDay(),