diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseUserRepository.java b/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseUserRepository.java index 459b0a07..b5090a1e 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseUserRepository.java +++ b/cameleer3-server-app/src/main/java/com/cameleer3/server/app/storage/ClickHouseUserRepository.java @@ -47,11 +47,16 @@ public class ClickHouseUserRepository implements UserRepository { @Override public void upsert(UserInfo user) { - // Preserve created_at from existing record on re-login. - // ReplacingMergeTree deduplicates by ORDER BY (user_id), keeping the row - // with the highest updated_at. Optional existing = findById(user.userId()); if (existing.isPresent()) { + UserInfo ex = existing.get(); + // Skip write if nothing changed — avoids accumulating un-merged rows + if (ex.provider().equals(user.provider()) + && ex.email().equals(user.email()) + && ex.displayName().equals(user.displayName()) + && ex.roles().equals(user.roles())) { + return; + } jdbc.update( "INSERT INTO users (user_id, provider, email, display_name, roles, created_at, updated_at) " + "SELECT user_id, ?, ?, ?, ?, created_at, now64(3, 'UTC') "