getByIds method

Future<Response<T>> getByIds(
  1. Iterable<String> ids, {
  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,
  11. bool? singletonMode,
})

Method to get data by multiple IDs with optional data source builder.

Example:

List<String> idsToRetrieve = ['userId1', 'userId2'];
repository.getByIds(
  idsToRetrieve,
  params: Params({"field1": "value1", "field2": "value2"}),
);

Implementation

Future<Response<T>> getByIds(
  Iterable<String> ids, {
  DataFieldParams? params,
  bool? countable,
  bool resolveRefs = false,
  bool resolveDocChangesRefs = false,
  Ignore? ignore,
  bool? createRefs,
  bool merge = true,
  bool? lazyMode,
  bool? backupMode,
  bool? singletonMode,
}) {
  return _modifier(DataModifiers.getByIds, () async {
    final feedback = await DataCacheManager.i.cache(
      "GET_BY_IDS",
      enabled: isSingletonMode(singletonMode),
      keyProps: [
        ...ids,
        params,
        resolveRefs,
        resolveDocChangesRefs,
      ],
      callback: () => _execute((source) {
        return source.getByIds(
          ids,
          params: params,
          countable: countable,
          resolveRefs: resolveRefs,
          resolveDocChangesRefs: resolveDocChangesRefs,
          ignore: ignore,
        );
      }),
    );
    if (feedback.isValid || !isBackupMode(backupMode)) return feedback;
    final backup = await _backup((source) {
      return source.getByIds(
        ids,
        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;
  });
}