getByIds method
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;
});
}