writeRecord method

  1. @override
Future<void> writeRecord(
  1. DataRecord record
)
override

Implementation

@override
Future<void> writeRecord(DataRecord record) async {
  final table = await _ensureTableForWrite(record.collection);
  final applied = await _guardingTable(
    record.collection,
    table,
    () => _upsertRecords(table, [record]),
    () async => _upsertRecords(
      await _ensureTableForWrite(record.collection),
      [record],
    ),
  );
  if (applied.isEmpty) {
    final versions = await _fetchVersions(table, [record.id]);
    final existingVersion = versions[record.id];
    if (existingVersion != null && existingVersion >= record.version) {
      throw RpcDataError.conflict(
        'Record ${record.id} in ${record.collection} is at version '
        '$existingVersion; incoming ${record.version} is not newer.',
      );
    }
  }
}