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)!;

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