Skip to content

fix: @PrePersist/@PreUpdate で LocalDateTime.now() をシステムクロックに依存している #132

Description

@claude

概要

Task.java および Tenant.java@PrePersist / @PreUpdate コールバックで LocalDateTime.now() を直接使用しており、JVM のシステムクロックに依存している。

問題点

// Task.java / Tenant.java 共通
void onCreate() {
    LocalDateTime now = LocalDateTime.now(); // JVM のシステム TZ・クロックに依存
    ...
}

対応案

Spring の Clock Bean をインジェクションして LocalDateTime.now(clock) を使用する。Clock は Clock.system(ZoneId.of("Asia/Tokyo")) で定義し、TZ 強制とテスト時の差し替え(Clock.fixed(...))を両立する。

@Configuration
class ClockConfig {
    @Bean
    Clock clock() {
        return Clock.system(ZoneId.of("Asia/Tokyo"));
    }
}

// Entity 側
@Autowired private Clock clock;

@PrePersist
void onCreate() {
    LocalDateTime now = LocalDateTime.now(clock);
    this.createdAt = now;
    this.updatedAt = now;
}

影響ファイル

  • webapi/src/main/java/xyz/dgz48/tasks/webapi/task/Task.java
  • webapi/src/main/java/xyz/dgz48/tasks/webapi/tenant/Tenant.java

参考

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions