batch<T> method
Future<Either<BaseException, T> >
batch<T>(
- String path, {
- required PaginationModel pagination,
- Map<
String, dynamic> ? queryParameters, - Options? options,
- RequestEnum type = .get,
- List<
JsonFieldAliasModel> jsonSchemas = const [], - required dynamic mapper(
- dynamic json
- void onAsync(
- Either<
BaseException, T> result
- Either<
- void onSync(
- Either<
BaseException, T> result
- Either<
- SyncApiRequestScope? scope,
override
Implementation
@override
Future<Either<BaseException, T>> batch<T>(
String path, {
required PaginationModel pagination,
Map<String, dynamic>? queryParameters,
Options? options,
RequestEnum type = .get,
List<JsonFieldAliasModel> jsonSchemas = const [],
required Function(dynamic json) mapper,
void Function(Either<BaseException, T> result)? onAsync,
void Function(Either<BaseException, T> result)? onSync,
SyncApiRequestScope? scope,
}) async {
final pageMapper = _SyncApiPageMapper<T>(
pagination: pagination,
mapper: (json) => mapper(json),
schemas: jsonSchemas,
);
final batchParameters = {...?queryParameters, ...pagination.toMap()};
final context = _SyncApiLoadContext<T>(
mapper: pageMapper.call,
onSync: onSync,
onAsync: onAsync,
scope: scope,
);
try {
if (pagination.isEnded) {
final result = Right<BaseException, T>(pageMapper.call(<String, dynamic>{}));
context.deliverNetwork(result);
return result;
}
final request = _SyncApiRequest(
path: path,
namespace: getUserId ?? '',
method: type,
queryParameters: type == .get ? batchParameters : null,
body: type == .post ? batchParameters : null,
options: options,
);
await _loadFromCache<T>(
context,
request,
);
if (!context.isCurrent) {
return Left(
SyncApiException(
detail: SeedKitModuleApiLocale.current.exception_sync_api_client,
),
);
}
return await _loadFromNetwork<T>(
context,
request,
);
} catch (error, stackTrace) {
final result = ErrorHandler.fromError<T>(
error,
stackTrace: stackTrace,
);
context.deliverNetwork(
ErrorHandler.fromError<T>(
error,
stackTrace: stackTrace,
),
);
return result;
}
}