set method

  1. @override
Future<T?> set(
  1. String? correlationId,
  2. T? item
)
override

Sets a data item. If the data item exists it updates it, otherwise it create a new data item.

  • correlation_id (optional) transaction id to trace execution through call chain.
  • item a item to be set. Return (optional) Future that receives updated item or error.

Implementation

@override
Future<T?> set(String? correlationId, T? item) async {
  var clone_item;
  if (item is ICloneable) {
    clone_item = (item as ICloneable).clone();
  } else {
    var jsonMap = json.decode(json.encode(item));
    clone_item = TypeReflector.createInstanceByType(T, []);
    clone_item.fromJson(jsonMap);
  }

  if (clone_item.id == null) {
    ObjectWriter.setProperty(clone_item, 'id', IdGenerator.nextLong());
  }

  if (clone_item.id == null) {
    ObjectWriter.setProperty(item, 'id', IdGenerator.nextLong());
  }

  var index = List.from(items.map((x) {
    return x.id;
  })).indexOf(clone_item.id);

  if (index < 0) {
    items.add(clone_item);
  } else {
    items[index] = clone_item;
  }
  logger.trace(correlationId, 'Set item %s', [clone_item.id]);
  await save(correlationId);
  return clone_item;
}