Add health check endpoint and refactor integration response handling

- Introduced a new public health check endpoint at `api/ping/` to verify API responsiveness.
- Refactored integration response handling to utilize a unified success and error response format across various methods in `IntegrationSettingsViewSet`, improving consistency and clarity in API responses.
- Updated URL patterns to include the new ping endpoint and adjusted imports accordingly.
This commit is contained in:
IGNY8 VPS (Salman)
2025-11-16 07:01:19 +00:00
parent 201bc339a8
commit 7cd0e1a807
9 changed files with 376 additions and 308 deletions

View File

@@ -138,6 +138,8 @@ export default function ImageGenerationCard({
console.log('[ImageGenerationCard] Making request to image generation endpoint');
console.log('[ImageGenerationCard] Request body:', requestBody);
// fetchAPI extracts data from unified format {success: true, data: {...}}
// So data is the extracted response payload
const data = await fetchAPI('/v1/system/settings/integrations/image_generation/generate/', {
method: 'POST',
body: JSON.stringify(requestBody),
@@ -145,8 +147,10 @@ export default function ImageGenerationCard({
console.log('[ImageGenerationCard] Response data:', data);
if (!data.success) {
throw new Error(data.error || 'Failed to generate image');
// fetchAPI extracts data from unified format, so data is the response payload
// If fetchAPI didn't throw, the request was successful
if (!data || typeof data !== 'object') {
throw new Error('Invalid response format');
}
const imageData = {

View File

@@ -81,38 +81,30 @@ export default function ValidationCard({
};
}
// Test endpoint returns Response({success: True, ...}) directly (not unified format)
// So fetchAPI may or may not extract it - handle both cases
// Test endpoint now returns unified format {success: true, data: {...}}
// fetchAPI extracts the data field, so data is the inner object
const data = await fetchAPI(`/v1/system/settings/integrations/${integrationId}/test/`, {
method: 'POST',
body: JSON.stringify(requestBody),
});
// Check if data has success field (direct Response format) or is extracted data
if (data && typeof data === 'object' && ('success' in data ? data.success : true)) {
// If data has success field, use it; otherwise assume success (extracted data)
const isSuccess = data.success !== false;
if (isSuccess) {
setTestResult({
success: true,
message: data.message || 'API connection successful!',
model_used: data.model_used || data.model,
response: data.response,
tokens_used: data.tokens_used,
total_tokens: data.total_tokens,
cost: data.cost,
full_response: data.full_response || {
image_url: data.image_url,
provider: data.provider,
size: data.size,
},
});
} else {
setTestResult({
success: false,
message: data.error || data.message || 'API connection failed',
});
}
// fetchAPI extracts data from unified format, so data is the response payload
if (data && typeof data === 'object') {
// Success response - data contains message, model_used, response, etc.
setTestResult({
success: true,
message: data.message || 'API connection successful!',
model_used: data.model_used || data.model,
response: data.response,
tokens_used: data.tokens_used,
total_tokens: data.total_tokens,
cost: data.cost,
full_response: data.full_response || {
image_url: data.image_url,
provider: data.provider,
size: data.size,
},
});
} else {
setTestResult({
success: false,