parsePage method

(List<T>, List<Id>) parsePage(
  1. List<Map<String, dynamic>> rows
)

Implementation

(List<T> upserts, List<Id> deletes) parsePage(
  List<Map<String, dynamic>> rows,
) {
  final upserts = <T>[];
  final deletes = <Id>[];
  var skipped = 0;
  for (final m in rows) {
    // Defensive checks: skip rows without required fields
    if (!m.containsKey(config.idField)) {
      skipped++;
      continue;
    }
    if (!m.containsKey(config.scopeNameField)) {
      skipped++;
      continue;
    }
    if (!m.containsKey(config.scopeKeysField)) {
      skipped++;
      continue;
    }
    final idRaw = m[config.idField];
    if (idRaw is! String) {
      skipped++;
      continue;
    }
    final isDeleted =
        config.deletedAtField != null && m[config.deletedAtField!] != null;
    if (isDeleted) {
      deletes.add(config.idFromString(idRaw));
    } else {
      upserts.add(config.fromJson(m));
    }
  }
  config.onParsePageStats?.call(skipped: skipped, total: rows.length);
  return (upserts, deletes);
}