更新upsert
This commit is contained in:
@@ -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(),
|
||||
);
|
||||
}
|
||||
|
||||
// ── 删除 ─────────────────────────────────────────────────────────────────
|
||||
|
||||
Reference in New Issue
Block a user