ensureReferencesStored method

  1. @override
FutureOr<bool> ensureReferencesStored(
  1. O o, {
  2. Transaction? transaction,
  3. TransactionOperation? operation,
})
override

Implementation

@override
FutureOr<bool> ensureReferencesStored(
  O o, {
  Transaction? transaction,
  TransactionOperation? operation,
}) {
  checkNotClosed();

  transaction ??= Transaction.executingOrNew(autoCommit: true);

  var fieldsNames = entityHandler.fieldsNames(o);

  var futures = fieldsNames.map((fieldName) {
    var value = entityHandler.getField(o, fieldName);
    if (value == null) return null;

    var fieldType = entityHandler.getFieldType(
      o,
      fieldName,
      resolveFiledName: false,
    )!;

    if (!EntityHandler.isValidEntityType(fieldType.type)) {
      return null;
    }

    if (value is List && fieldType.isList && fieldType.hasArguments) {
      var elementType = fieldType.arguments.first;

      var elementRepository = provider.getEntityRepositoryByTypeInfo(
        elementType,
      );
      if (elementRepository == null) return null;

      var futures = value.map((e) {
        return elementRepository.ensureStored(
          e,
          transaction: transaction,
          operation: operation,
        );
      }).toList();

      return futures.resolveAll();
    } else {
      var repository = provider.getEntityRepository(
        type: fieldType.type,
        obj: value,
      );
      if (repository == null) return null;

      return repository.ensureStored(
        value,
        transaction: transaction,
        operation: operation,
      );
    }
  });

  return futures.resolveAllWithValue(true);
}