put method

Future<T> put(
  1. dynamic d
)

Implementation

Future<T> put(d) async {
  //final ctrl = FractalCtrl.map[item['name']] as EventsCtrl;
  final mk = MakeF.init(d);

  final attrs = allAttributes;
  await FData.require(mk, [
    ...attrs.values
        .where(
          (a) => a.format == FormatF.reference,
        )
        .map((a) => a.name)
  ]);

  if ((mk.map['hash'] ?? '') == '') {
    final hd = hashData(mk.map);
    mk.map['hash'] = Hashed.make(hd);
  }

  var evf = EventFractal.storage[mk.map['hash']] as T?;

  if (evf != null) return evf;

  if ([
        FKind.system.index,
        FKind.eternal.index,
        FKind.file.index,
      ].contains(mk.map['kind']) &&
      mk.map['stored_at'] == null) {
    final res = await select(
      where: {'hash': mk.map['hash']},
    );

    print('#${mk.map['hash']} res $res');
    res.firstOrNull?.forEach((k, v) {
      final attr = attrs[k];
      if (attr?.format != FormatF.reference && !mk.map.containsKey(k)) {
        mk.map[k] = v;
      }
    });
  }

  print('put ${mk.map}');

  return evf ?? make(mk.map);
}