batch<T> method

  1. @override
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
    ),
  8. void onAsync(
    1. Either<BaseException, T> result
    )?,
  9. void onSync(
    1. Either<BaseException, T> result
    )?,
  10. 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;
  }
}