search method

Future<Response<T>> search(
  1. Checker checker, {
  2. DataFieldParams? params,
  3. bool? countable,
  4. bool resolveRefs = false,
  5. bool resolveDocChangesRefs = false,
  6. Ignore? ignore,
  7. bool? createRefs,
  8. bool merge = true,
  9. bool? lazyMode,
  10. bool? backupMode,
})

Method to check data by query with optional data source builder.

Example:

Checker checker = Checker(field: 'status', value: 'active');
repository.search(
  checker,
  params: Params({"field1": "value1", "field2": "value2"}),
);

Implementation

Future<Response<T>> search(
  Checker checker, {
  DataFieldParams? params,
  bool? countable,
  bool resolveRefs = false,
  bool resolveDocChangesRefs = false,
  Ignore? ignore,
  bool? createRefs,
  bool merge = true,
  bool? lazyMode,
  bool? backupMode,
}) {
  return _modifier(DataModifiers.search, () async {
    final feedback = await _execute((source) {
      return source.search(
        checker,
        params: params,
        countable: countable,
        resolveRefs: resolveRefs,
        resolveDocChangesRefs: resolveDocChangesRefs,
        ignore: ignore,
      );
    });
    if (feedback.isValid || !isBackupMode(backupMode)) return feedback;
    final backup = await _backup((source) {
      return source.search(
        checker,
        params: params,
        countable: countable,
        resolveRefs: resolveRefs,
        resolveDocChangesRefs: resolveDocChangesRefs,
        ignore: ignore,
      );
    });
    if (backup.isValid) {
      if (isLazyMode(lazyMode)) {
        _execute((source) {
          return source.creates(
            backup.result.map((e) => DataWriter(id: e.id, data: e.filtered)),
            params: params,
            createRefs: createRefs ?? resolveRefs,
            merge: merge,
          );
        });
      } else {
        await _execute((source) {
          return source.creates(
            backup.result.map((e) => DataWriter(id: e.id, data: e.filtered)),
            params: params,
            createRefs: createRefs ?? resolveRefs,
            merge: merge,
          );
        });
      }
    }
    return backup;
  });
}