batchDelete method
Implementation
@override
Future<void> batchDelete(List<Id> ids) async {
if (ids.isEmpty) return;
// If per-id scope is provided and injection is enabled, group by scope and issue scoped queries.
if (config.injectScopeOnWrite && config.scopeForDelete != null) {
final groups = groupDeletesByScope(ids);
for (final entry in groups.entries) {
final idsForScope = entry.value;
if (idsForScope.isEmpty) continue;
if (config.deletedAtColumn != null) {
var q = _table().update({
config.deletedAtColumn!: DateTime.now().toUtc().toIso8601String(),
});
final s = entry.key;
if (s != null) {
q = q
.eq(config.scopeNameColumn, s.name)
.contains(config.scopeKeysColumn, s.keys);
}
await q.inFilter(config.idColumn, idsForScope);
} else {
var dq = _table().delete();
final s = entry.key;
if (s != null) {
dq = dq
.eq(config.scopeNameColumn, s.name)
.contains(config.scopeKeysColumn, s.keys);
}
await dq.inFilter(config.idColumn, idsForScope);
}
}
return;
}
// Fallback: single query with optional default scope filter
final idList = ids.map(config.idToString).toList(growable: false);
if (config.deletedAtColumn != null) {
var q = _table().update({
config.deletedAtColumn!: DateTime.now().toUtc().toIso8601String(),
});
if (config.injectScopeOnWrite && config.defaultScope != null) {
q = q
.eq(config.scopeNameColumn, config.defaultScope!.name)
.contains(config.scopeKeysColumn, config.defaultScope!.keys);
}
await q.inFilter(config.idColumn, idList);
} else {
var dq = _table().delete();
if (config.injectScopeOnWrite && config.defaultScope != null) {
dq = dq
.eq(config.scopeNameColumn, config.defaultScope!.name)
.contains(config.scopeKeysColumn, config.defaultScope!.keys);
}
await dq.inFilter(config.idColumn, idList);
}
}