postJson static method

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

Create a standardized postJson method for providers

This method provides consistent error handling and response parsing for all providers that need postJson functionality.

Implementation

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

  try {
    // Log request if fine logging is enabled
    if (log.isLoggable(Level.FINE)) {
      log.fine('$provider request: POST $endpoint');
      log.fine('$provider request payload: ${jsonEncode(data)}');
    }

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

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

    // Check status code
    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}',
      );
    }

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