mergeOne method

Future<FormResultFree?> mergeOne(
  1. String id,
  2. Map<String, Object?> data
)

Implementation

Future<FormResultFree?> mergeOne(
  String id,
  Map<String, Object?> data,
) async {
  var oldData = await getById(id);

  if (oldData == null) {
    return null;
  }

  FormResultFree validationResult = await validate(
    data,
    onlyCheckKeys: data.keys.toList(),
  );
  var newData = validationResult.formValues();
  var mergedData = {
    ...oldData,
    ...newData,
  };
  if (validationResult.success) {
    var result = await collection.replaceOne(
      where.id(id.oID!),
      mergedData,
      upsert: false,
    );

    var newUpdate = await getById(id);
    if (result.isSuccess && newUpdate != null) {
      validationResult.updateValues(newUpdate);
      await collectionEvent.onUpdate.emit(newUpdate);
    }
    return validationResult;
  } else {
    return await validate(mergedData);
  }
}