ensureReferencesStored method
FutureOr<bool>
ensureReferencesStored(
- O o, {
- Transaction? transaction,
- 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);
}