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;
}