From 5b547cb73c01e8d63d43628b4ee5da526341cfaa Mon Sep 17 00:00:00 2001 From: Klaus Date: Fri, 13 Mar 2026 18:09:34 +0900 Subject: [PATCH] =?UTF-8?q?fix(push-notification-list):=20=ED=91=B8?= =?UTF-8?q?=EC=8B=9C=20=EC=95=8C=EB=A6=BC=20=EC=A1=B0=ED=9A=8C=20=EA=B8=B0?= =?UTF-8?q?=EA=B0=84=20=ED=83=80=EC=9E=84=EC=A1=B4=20=EA=B8=B0=EC=A4=80?= =?UTF-8?q?=EC=9D=84=20=EB=A1=9C=EC=BB=AC=201=EC=A3=BC=EB=A1=9C=20?= =?UTF-8?q?=ED=86=B5=EC=9D=BC=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...260313_푸시알림조회기간타임존정합성수정.md | 19 +++++++++++++++++++ .../notification/PushNotificationService.kt | 9 ++++----- 2 files changed, 23 insertions(+), 5 deletions(-) create mode 100644 docs/20260313_푸시알림조회기간타임존정합성수정.md diff --git a/docs/20260313_푸시알림조회기간타임존정합성수정.md b/docs/20260313_푸시알림조회기간타임존정합성수정.md new file mode 100644 index 00000000..76ebfcd8 --- /dev/null +++ b/docs/20260313_푸시알림조회기간타임존정합성수정.md @@ -0,0 +1,19 @@ +## 작업 개요 + +- [x] `PushNotificationService`의 1주 조회 시작 시각 계산 기준을 저장 시각(`BaseEntity.createdAt`)과 동일한 시스템 기본 타임존으로 통일한다. +- [x] `getNotificationList` 및 `getAvailableCategories`가 동일한 1주일 범위를 유지하는지 확인한다. +- [x] 관련 import/함수명을 정리해 코드 가독성과 의도를 명확히 한다. +- [x] 변경 파일 진단과 Gradle 검증(`test`, `build`)을 수행하고 결과를 기록한다. + +--- + +## 검증 기록 + +### 1차 구현 + +- 무엇을: `PushNotificationService`의 조회 기간 계산을 UTC 기준에서 시스템 기본 타임존 기준으로 변경. +- 왜: `createdAt` 저장 시각이 시스템 기본 타임존(`LocalDateTime.now()`)이므로 조회 기준만 UTC를 사용하면 서버 타임존이 UTC가 아닐 때 실제 조회 기간이 7일과 어긋날 수 있음. +- 어떻게: + - `lsp_diagnostics` 실행: `.kt` 확장자용 LSP 서버 미설정으로 도구 진단 불가(환경 제약 확인). + - `./gradlew test` 실행: 성공(BUILD SUCCESSFUL). + - `./gradlew build` 실행: 성공(BUILD SUCCESSFUL). diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/fcm/notification/PushNotificationService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/fcm/notification/PushNotificationService.kt index d02a983e..4895c5b9 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/fcm/notification/PushNotificationService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/fcm/notification/PushNotificationService.kt @@ -17,7 +17,6 @@ import org.springframework.data.repository.findByIdOrNull import org.springframework.stereotype.Service import org.springframework.transaction.annotation.Transactional import java.time.LocalDateTime -import java.time.ZoneOffset @Service @Transactional(readOnly = true) @@ -82,7 +81,7 @@ class PushNotificationService( ): GetPushNotificationListResponse { val parsedCategory = parseCategory(category) val languageCode = langContext.lang.code - val fromDateTime = oneMonthAgoUtc() + val fromDateTime = oneWeekAgo() val totalCount = pushNotificationListRepository.getNotificationCount( memberId = member.id!!, @@ -110,7 +109,7 @@ class PushNotificationService( val localizedCategories = pushNotificationListRepository.getAvailableCategories( memberId = member.id!!, languageCode = lang.code, - fromDateTime = oneMonthAgoUtc() + fromDateTime = oneWeekAgo() ).map { category -> messageSource.getMessage("push.notification.category.${category.code}", lang) ?: category.code } @@ -150,8 +149,8 @@ class PushNotificationService( } } - private fun oneMonthAgoUtc(): LocalDateTime { - return LocalDateTime.now(ZoneOffset.UTC).minusMonths(1) + private fun oneWeekAgo(): LocalDateTime { + return LocalDateTime.now().minusWeeks(1) } private fun resolveCategory(fcmEvent: FcmEvent): PushNotificationCategory? {