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.databases.updateDocument(
        databaseId: config.databaseId,
        collectionId: config.collectionId,
        documentId: id,
        data: data,
      );
    } on aw.AppwriteException catch (_) {
      // Create if not exists
      await config.databases.createDocument(
        databaseId: config.databaseId,
        collectionId: config.collectionId,
        documentId: id, // custom id to align with our domain id
        data: data,
      );
    }
  }
}