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
Implementation
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,
}) async {
try {
if (pagination.isEnded) return Right(mapper(<String, dynamic>{}));
queryParameters = {
...?queryParameters,
...pagination.toMap(),
};
Response response = await switch (type) {
.get => _dio.get(
path,
options: options,
queryParameters: queryParameters,
),
.post => _dio.post(
path,
data: queryParameters,
options: options,
),
};
// Нормализация нейминга параметра пагинации
response.data = JsonNormalizer.normalize(response.data, [
const JsonFieldAliasModel(['results', 'items']),
]);
// Нормализация по входящей схеме
if (jsonSchemas.isNotEmpty) {
response.data = JsonNormalizer.normalize(
response.data,
jsonSchemas,
);
}
final items = response.data[batchKey] as List;
pagination.checkEnded(items.length);
if (!pagination.isEnded) pagination.nextPage();
return Right(mapper(response.data));
} catch (err, s) {
return ErrorHandler.fromError(err, stackTrace: s);
}
}