batchUpsert method

  1. @override
Future<void> batchUpsert(
  1. List<T> items
)
override

Implementation

@override
Future<void> batchUpsert(List<T> items) async {
  // Appwrite doesn't have multi-document transactions for Databases.
  // Perform sequential upserts (create or update by id).
  final payloads = buildUpsertPayloads(items);
  for (final entry in payloads) {
    final id = entry.$1;
    final data = entry.$2;
    try {
      // Try update first
      await config.tablesDB.updateRow(
        databaseId: config.databaseId,
        tableId: config.tableId,
        rowId: id,
        data: data,
      );
    } on aw.AppwriteException catch (_) {
      // Create if not exists
      await config.tablesDB.createRow(
        databaseId: config.databaseId,
        tableId: config.tableId,
        rowId: id, // custom id to align with our domain id
        data: data,
      );
    }
  }
}