更新upsert

This commit is contained in:
Happi (哈比)
2026-03-10 12:41:02 +08:00
parent 56bdae8db3
commit 1c996075e3
5 changed files with 91 additions and 15 deletions

View File

@@ -282,8 +282,10 @@ class UserRepositoryImpl implements UserRepository {
@override
Future<void> insertOrReplaceUser(User user) async {
if (user.requireUpsert) {
await _storage.insertOrReplace<DriftUser>(_toCompanion(user));
await upsertUser(user);
}
await _storage.insertOrReplace<DriftUser>(_toCompanion(user));
}
@override
@@ -331,7 +333,9 @@ class UserRepositoryImpl implements UserRepository {
///
/// 内部委托给 [upsertUsers]。
@override
Future<void> upsertUser(User user) => upsertUsers([user]);
Future<void> upsertUser(User user) async {
await _storage.insertOnConflictUpdate<DriftUser>(_toPartialCompanion(user));
}
/// 批量 upsert不存在则插入存在则仅更新非 null 字段。
///
@@ -343,15 +347,9 @@ class UserRepositoryImpl implements UserRepository {
/// 适用场景:从服务端收到部分用户信息,不希望覆盖本地已有的其他字段。
@override
Future<void> upsertUsers(List<User> users) async {
await _storage.transaction(() async {
for (final user in users) {
await _storage.insert<DriftUser>(_toCompanion(user));
await _storage.updateWhere<DriftUser, $UsersTable>(
_toPartialCompanion(user),
(t) => t.uid.equals(user.uid),
);
}
});
await _storage.batchInsertOnConflictUpdate<DriftUser>(
users.map(_toPartialCompanion).toList(),
);
}
// ── 删除 ─────────────────────────────────────────────────────────────────