deleteMany method
Delete semantics within the given scope
:
- If supportsSoftDelete is true, mark items as deleted (e.g., set deletedAt) and keep rows.
- Otherwise, remove rows permanently (hard delete).
Implementation
@override
Future<void> deleteMany(SyncScope scope, List<Id> ids) async {
if (ids.isEmpty) return;
final sk = _scopeKey(scope);
if (supportsSoftDelete) {
final nowIso = DateTime.now().toUtc().toIso8601String();
await db.batch((b) {
for (final id in ids) {
final idStr = idToString(id);
b.insert(
db.items,
ItemsCompanion.insert(
scopeName: scope.name,
scopeKeys: sk,
id: idStr,
payload: jsonEncode({}), // payload may be empty on tombstone
updatedAt: nowIso,
deletedAt: d.Value(nowIso),
),
onConflict: d.DoUpdate(
(old) => ItemsCompanion(
deletedAt: d.Value(nowIso),
updatedAt: d.Value(nowIso),
),
),
);
}
});
} else {
await (db.delete(db.items)..where(
(t) =>
(t.scopeName.equals(scope.name) &
t.scopeKeys.equals(sk) &
t.id.isIn(ids.map(idToString))),
))
.go();
}
await _maybeEnforceLimit();
}