Skip to content

[Main] refac: 시간대 변경#56

Merged
ksoheee merged 1 commit intomainfrom
feat/#30
Nov 10, 2025
Merged

[Main] refac: 시간대 변경#56
ksoheee merged 1 commit intomainfrom
feat/#30

Conversation

@ksoheee
Copy link
Contributor

@ksoheee ksoheee commented Nov 10, 2025

📝 Summary

  • 시간대 변경

Summary by CodeRabbit

버그 수정

  • 주문 요청, 처리, 배송 및 스케줄 작업의 모든 시간 정보를 서울 표준시(Asia/Seoul)로 올바르게 처리하도록 개선했습니다.

@ksoheee ksoheee self-assigned this Nov 10, 2025
@coderabbitai
Copy link

coderabbitai bot commented Nov 10, 2025

Walkthrough

세 개의 자바 파일에서 시간 처리를 수정했습니다. LocalDateTime.now() 호출을 ZonedDateTime.now(ZoneId.of("Asia/Seoul")).toLocalDateTime()로 대체하여 모든 타임스탬프 및 시간 계산이 Asia/Seoul 타임존을 기준으로 동작하도록 변경했습니다.

Changes

Cohort / File(s) 변경 사항 요약
주문 엔티티 타임존 처리
src/main/java/com/gearfirst/backend/api/order/entity/PurchaseOrder.java
생성자 및 메서드(decide, ship, complete, cancel)의 4개 날짜 필드(requestDate, processedDate, transferDate, completedDate)에서 Seoul 타임존 기반 현재 시간 사용. ZoneId, ZonedDateTime 임포트 추가
스케줄러 초기화 타임존 처리
src/main/java/com/gearfirst/backend/api/schedule/init/SchedulerInitializer.java
현재 시간(now) 및 대기 중인 작업 조회용 시간 파라미터(to)에 Seoul 타임존 적용. ZoneId, ZonedDateTime 임포트 추가
스케줄 작업 서비스 타임존 처리
src/main/java/com/gearfirst/backend/api/schedule/service/ScheduledTaskService.java
runAt(초기 3일 리드타임) 및 retryAt(1시간 재시도 간격) 시간 계산에 Seoul 타임존 적용. ZonedDateTime 임포트 추가

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

  • 동일한 타임존 처리 패턴이 세 파일에 일관되게 적용됨
  • ZoneId 문자열("Asia/Seoul") 일관성 확인 필요
  • 누락된 LocalDateTime.now() 호출이 있는지 검증 필요
  • 타임존 변환 로직이 모든 시간 관련 연산에 올바르게 적용되었는지 확인

Possibly related PRs

  • [Main] Feat/#30 납품완료 스케줄링 등록(3일) #53: 본 PR의 변경 사항(Asia/Seoul ZonedDateTime 사용 추가)이 해당 PR에서 도입/사용된 스케줄링 관련 클래스(SchedulerInitializer, ScheduledTaskService) 및 PurchaseOrder 타임스탬프를 직접 수정합니다.

Pre-merge checks and finishing touches

❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Description check ⚠️ Warning PR 설명이 매우 불완전합니다. 필수 섹션인 Related Issue와 Question & PR point가 누락되었고, Summary 섹션도 최소한의 정보만 포함되어 있습니다. Related Issue 섹션을 추가하고, Summary에 구체적인 변경 내용(어떤 파일에서, 왜 Asia/Seoul 시간대로 변경했는지)을 기술해주세요.
Docstring Coverage ⚠️ Warning Docstring coverage is 75.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (1 passed)
Check name Status Explanation
Title check ✅ Passed PR 제목은 주요 변경 사항인 시간대 변경을 명확하게 요약하고 있으며, 구체적이고 간결합니다.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feat/#30

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/main/java/com/gearfirst/backend/api/schedule/service/ScheduledTaskService.java (1)

67-67: 타임존 불일치로 인한 스케줄링 오류 가능성

Line 67에서 ZoneId.systemDefault()를 사용하여 Instant로 변환하고 있습니다. 그러나 task.getRunAt()은 Asia/Seoul 타임존 기준으로 계산된 LocalDateTime입니다. 시스템 타임존이 Asia/Seoul과 다를 경우 작업이 의도한 시간과 다른 시간에 실행됩니다.

예시: runAt이 2025-11-13 15:00:00 (서울 시간)이고 시스템 타임존이 UTC인 경우, 작업은 9시간 일찍 실행됩니다.

다음과 같이 수정하여 Asia/Seoul 타임존을 명시적으로 사용해야 합니다:

         taskScheduler.schedule(() -> executeTask(task , task.getOrderId()),
-                Date.from(task.getRunAt().atZone(ZoneId.systemDefault()).toInstant()));
+                Date.from(task.getRunAt().atZone(ZoneId.of("Asia/Seoul")).toInstant()));
🧹 Nitpick comments (1)
src/main/java/com/gearfirst/backend/api/order/entity/PurchaseOrder.java (1)

85-85: 반복되는 타임존 로직을 유틸리티 메서드로 추출 권장

ZonedDateTime.now(ZoneId.of("Asia/Seoul")).toLocalDateTime() 패턴이 이 파일에서만 5회, 전체 PR에서 9회 반복됩니다. 유틸리티 클래스로 추출하여 코드 중복을 제거하고 유지보수성을 개선하는 것을 권장합니다.

예시 구현:

// 새 파일: src/main/java/com/gearfirst/backend/common/util/DateTimeUtil.java
package com.gearfirst.backend.common.util;

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;

public class DateTimeUtil {
    private static final ZoneId SEOUL_ZONE = ZoneId.of("Asia/Seoul");
    
    public static LocalDateTime nowInSeoul() {
        return ZonedDateTime.now(SEOUL_ZONE).toLocalDateTime();
    }
}

적용 후:

-        this.requestDate = ZonedDateTime.now(ZoneId.of("Asia/Seoul")).toLocalDateTime();
+        this.requestDate = DateTimeUtil.nowInSeoul();

Also applies to: 112-112, 119-119, 125-125, 132-132

📜 Review details

Configuration used: Path: .coderabbit.yml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between f1dcaee and ad6be58.

📒 Files selected for processing (3)
  • src/main/java/com/gearfirst/backend/api/order/entity/PurchaseOrder.java (3 hunks)
  • src/main/java/com/gearfirst/backend/api/schedule/init/SchedulerInitializer.java (2 hunks)
  • src/main/java/com/gearfirst/backend/api/schedule/service/ScheduledTaskService.java (3 hunks)
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-10-28T05:05:49.715Z
Learnt from: ksoheee
Repo: Gear-First/gearfirst-order-BE PR: 26
File: src/main/java/com/gearfirst/backend/api/order/controller/PurchaseOrderController.java:93-98
Timestamp: 2025-10-28T05:05:49.715Z
Learning: In the Gear-First order backend (gearfirst-order-BE) Java Spring Boot project, when an endpoint performs state changes on the PurchaseOrder entity (such as calling order.completeRepair()), ensure the endpoint's Operation summary and description clearly document that state modification occurs, and use appropriate HTTP methods (POST/PATCH/PUT) rather than GET, even if the endpoint also returns data.

Applied to files:

  • src/main/java/com/gearfirst/backend/api/order/entity/PurchaseOrder.java
🔇 Additional comments (5)
src/main/java/com/gearfirst/backend/api/order/entity/PurchaseOrder.java (1)

15-16: 필요한 import 추가 확인

Asia/Seoul 타임존 처리를 위한 필수 import가 올바르게 추가되었습니다.

src/main/java/com/gearfirst/backend/api/schedule/init/SchedulerInitializer.java (2)

14-15: 필요한 import 추가 확인

타임존 처리를 위한 필수 import가 올바르게 추가되었습니다.


26-26: 타임존 처리 로직 확인

Asia/Seoul 타임존이 올바르게 적용되었으며, 초기화 로직이 정상적으로 동작합니다. PurchaseOrder.java에서 제안한 유틸리티 메서드를 적용하면 이 부분도 개선될 수 있습니다.

Also applies to: 30-30

src/main/java/com/gearfirst/backend/api/schedule/service/ScheduledTaskService.java (2)

20-20: 필요한 import 추가 확인

타임존 처리를 위한 필수 import가 올바르게 추가되었습니다.


42-42: 타임존 계산 로직 확인

3일 후 실행 시간과 1시간 후 재시도 시간 계산에 Asia/Seoul 타임존이 올바르게 적용되었습니다. PurchaseOrder.java에서 제안한 유틸리티 메서드를 적용하면 이 부분도 개선될 수 있습니다.

Also applies to: 98-98

@ksoheee ksoheee merged commit c417e7a into main Nov 10, 2025
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant