batch<T> method

Future<Either<BaseException, T>> batch<T>(
  1. String path, {
  2. required PaginationModel pagination,
  3. Map<String, dynamic>? queryParameters,
  4. Options? options,
  5. RequestEnum type = .get,
  6. List<JsonFieldAliasModel> jsonSchemas = const [],
  7. required dynamic mapper(
    1. 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);
  }
}