set method
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;
}