feat(iam): add @PrePersist callback to auto-populate User.createdAt

Add onCreate() method with @PrePersist annotation that sets createdAt
to LocalDateTime.now() on first persist, consistent with other entities
(UserTariff, CommunityTariff, etc.). Guard prevents overwriting existing
values. Two new tests verify auto-population and idempotency.
This commit is contained in:
Bernhard Müller 2026-07-24 07:11:52 +02:00
parent f1cf152091
commit 3e336ca3c9
2 changed files with 31 additions and 0 deletions

View File

@ -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<? extends GrantedAuthority> getAuthorities() {

View File

@ -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");
}
}