postJson static method
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');
}
}