storeAllFromJson method

FutureOr<Map<String, List<Object>>> storeAllFromJson(
  1. Map<String, Iterable<Map<String, dynamic>>> entries, {
  2. Transaction? transaction,
  3. EntityResolutionRules? resolutionRules,
  4. Map<String, dynamic>? variables,
})

Implementation

FutureOr<Map<String, List<Object>>> storeAllFromJson(
    Map<String, Iterable<Map<String, dynamic>>> entries,
    {Transaction? transaction,
    EntityResolutionRules? resolutionRules,
    Map<String, dynamic>? variables}) async {
  var results = <String, List<Object>>{};

  var allRepositoriesBuildOrder =
      allRepositories().values.toList(growable: false);

  var entriesRepositoriesOrdered = entries.entries.map((e) {
    var typeName = e.key;
    var entities = e.value;
    var entityRepository = getEntityRepository(name: typeName);
    return MapEntry(typeName, (entities, entityRepository));
  }).sorted((a, b) {
    var rep1 = a.value.$2;
    var rep2 = b.value.$2;

    var idx1 = rep1 != null ? allRepositoriesBuildOrder.indexOf(rep1) : -1;
    var idx2 = rep2 != null ? allRepositoriesBuildOrder.indexOf(rep2) : -1;

    if (idx1 < 0) {
      idx1 = 9999999;
    }

    if (idx2 < 0) {
      idx2 = 9999999;
    }

    return idx1.compareTo(idx2);
  }).toMapFromEntries();

  _log.info('Repositories build order:');
  for (var e in entriesRepositoriesOrdered.entries) {
    var typeName = e.key;
    _log.info('  -- $typeName');
  }

  for (var e in entriesRepositoriesOrdered.entries) {
    var typeName = e.key;
    var typeEntries = e.value.$1;
    var entityRepository = e.value.$2;

    if (typeEntries.isEmpty) {
      results[typeName] = [];
      continue;
    }

    _log.info(
        'Populating `$typeName`: ${typeEntries.length} JSON entries...$_logSectionOpen');

    if (entityRepository == null) {
      throw StateError(
          "Can't find `EntityRepository` for type name: $typeName");
    }

    try {
      var os = await entityRepository.storeAllFromJson(typeEntries,
          resolutionRules: resolutionRules);
      results[typeName] = os;

      _log.info(
          'Populated `$typeName` entries: ${os.length}$_logSectionClose');
    } catch (e, s) {
      _log.severe('Error population `$typeName` entries.', e, s);
      rethrow;
    }
  }

  return results;
}