batchDelete method

  1. @override
Future<void> batchDelete(
  1. List<Id> ids
)
override

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);
  }
}