insertOrUpdateCollectionByServerId method
Future<void>
insertOrUpdateCollectionByServerId(
- List<
T> entries, { - List<
FieldWithValue> ? fieldsToCopy,
Insert or update a collection of entries
, with considering DbModel.serverId as
the key.
Insert entries
with not inserted serverId before and update the inserted before.
Implementation
Future<void> insertOrUpdateCollectionByServerId(List<T> entries,
{List<FieldWithValue>? fieldsToCopy}) async {
try {
//get serverIds
List<int> itemServerIds = [
for (var i in entries)
if (i.serverId.value != null) i.serverId.value!
];
//get already inserted serverIds
List<T> insertedItems =
await select(where: (s) => s.serverId.inCollection(itemServerIds));
var insertedServerIds =
insertedItems.map<int>((e) => e.serverId.value!).toList();
//Get items need to be updated
for (var item in insertedItems) {
var newItem =
entries.firstWhere((i) => i.serverId.value == item.serverId.value);
item.copyValuesFrom(newItem, fieldsToCopy: fieldsToCopy);
}
await updateCollectionByServerId(insertedItems);
//Get items need to be insered
var newItems = entries
.where((e) => !insertedServerIds.contains(e.serverId.value))
.toList();
await insertCollection(newItems);
} catch (e) {
print('Error: $e');
return;
}
}