getJson static method

Future<Map<String, dynamic>> getJson(
  1. Dio dio,
  2. String endpoint, {
  3. String? providerName,
  4. Logger? logger,
  5. Map<String, dynamic>? queryParameters,
  6. Options? options,
})

Create a standardized getJson method for providers

Implementation

static Future<Map<String, dynamic>> getJson(
  Dio dio,
  String endpoint, {
  String? providerName,
  Logger? logger,
  Map<String, dynamic>? queryParameters,
  Options? options,
}) async {
  final provider = providerName ?? 'Unknown';
  final log = logger ?? _logger;

  try {
    if (log.isLoggable(Level.FINE)) {
      log.fine('$provider request: GET $endpoint');
    }

    final response = await dio.get(
      endpoint,
      queryParameters: queryParameters,
      options: options,
    );

    if (log.isLoggable(Level.FINE)) {
      log.fine('$provider HTTP status: ${response.statusCode}');
    }

    if (response.statusCode != 200) {
      log.severe('$provider API returned status ${response.statusCode}');
      throw DioException(
        requestOptions: response.requestOptions,
        response: response,
        message: '$provider API returned status ${response.statusCode}',
      );
    }

    return parseJsonResponse(response.data, providerName: provider);
  } on DioException catch (e) {
    log.severe('$provider HTTP GET request failed: ${e.message}');
    rethrow;
  } catch (e) {
    if (e is LLMError) {
      rethrow;
    }
    log.severe('Unexpected error in $provider getJson: $e');
    throw GenericError('Unexpected error: $e');
  }
}