storeData<DataT extends Data> function

Future<String> storeData<DataT extends Data>(
  1. DataT data, {
  2. required String forId,
  3. bool addId = true,
  4. OverrideMode overrideMode = OverrideMode.update,
})

permanently stores a DataT in its corresponding collection

Implementation

Future<String> storeData<DataT extends Data>(
  DataT data, {
  required String forId,
  bool addId = true,
  OverrideMode overrideMode = OverrideMode.update,
}) async {
  final collectionName = _getCollectionNameForData<DataT>(forId);

  var json = data.toJson();
  String? oldId = data.id;

  final isExistent = ((await db.collection(collectionName).get())
          ?.keys
          .contains('/$collectionName/$oldId')) ??
      false;
  if (overrideMode == OverrideMode.abortIfExistent && isExistent) {
    debugPrint('wont override $oldId');
    return '';
  }

  //create a new document with new id if wanted
  final id = (!isExistent || overrideMode == OverrideMode.update)
      ? oldId
      : db.collection(collectionName).doc().id;

  if (addId) json['local_id'] = id;
  db.collection(collectionName).doc(id).set(json);

  return id;
}