diff --git a/eeg_backend/src/main/java/at/mueller/eeg/backend/iam/domain/User.java b/eeg_backend/src/main/java/at/mueller/eeg/backend/iam/domain/User.java index 2853618..bb7bbff 100644 --- a/eeg_backend/src/main/java/at/mueller/eeg/backend/iam/domain/User.java +++ b/eeg_backend/src/main/java/at/mueller/eeg/backend/iam/domain/User.java @@ -65,6 +65,13 @@ public class User implements UserDetails { @Column(nullable = false) private boolean enabled = false; + @PrePersist + protected void onCreate() { + if (createdAt == null) { + createdAt = LocalDateTime.now(); + } + } + @Override @NonNull public Collection getAuthorities() { diff --git a/eeg_backend/src/test/java/at/mueller/eeg/backend/iam/domain/UserTest.java b/eeg_backend/src/test/java/at/mueller/eeg/backend/iam/domain/UserTest.java index e0d0c03..453e404 100644 --- a/eeg_backend/src/test/java/at/mueller/eeg/backend/iam/domain/UserTest.java +++ b/eeg_backend/src/test/java/at/mueller/eeg/backend/iam/domain/UserTest.java @@ -33,4 +33,28 @@ class UserTest { assertNull(user.getCreatedAt(), "createdAt should default to null (not auto-generated)"); } + + @Test + void prePersistSetsCreatedAt() { + User user = new User(); + + LocalDateTime before = LocalDateTime.now(); + user.onCreate(); + LocalDateTime after = LocalDateTime.now(); + + assertNotNull(user.getCreatedAt(), "createdAt must be set by @PrePersist callback"); + assertFalse(user.getCreatedAt().isBefore(before), "createdAt must not be before test start"); + assertFalse(user.getCreatedAt().isAfter(after), "createdAt must not be after test end"); + } + + @Test + void prePersistDoesNotOverwriteExistingCreatedAt() { + User user = new User(); + LocalDateTime fixed = LocalDateTime.of(2025, 1, 1, 12, 0); + user.setCreatedAt(fixed); + + user.onCreate(); + + assertEquals(fixed, user.getCreatedAt(), "createdAt must not be overwritten if already set"); + } }