setItems method

  1. @override
Future<WriteListResult<T>> setItems(
  1. WriteListOperation<T> operation
)
override

Persists all WriteListOperation.items.

Implementation

@override
Future<WriteListResult<T>> setItems(WriteListOperation<T> operation) async {
  if (setItemsHandler == null) {
    throw UnimplementedError();
  }
  late final List<T>? objs;
  try {
    objs = await setItemsHandler!.call(operation);
  } on Exception catch (e) {
    _log.severe(e);
    return WriteListFailure<T>(
      FailureReason.serverError,
      'Failed to save ${operation.items}',
    );
  }
  final anyNewItems = operation.items.any(
    (item) => bindings.getId(item) == null,
  );
  if (anyNewItems && objs == null) {
    _log.warning(
      'Saved new $T objects but no finalized objects were returned; '
      'therefore we do not know their Ids',
    );
  }
  return WriteListSuccess(
    objs ?? operation.items,
    details: operation.details,
  );
}