mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-23 13:11:12 -05:00
feat: Implement final error coverage
This commit is contained in:
@@ -9,8 +9,7 @@
|
||||
import { SupabaseClient } from '@supabase/supabase-js';
|
||||
import { createTableQuery } from '@/lib/supabaseHelpers';
|
||||
import type { ModerationItem } from '@/types/moderation';
|
||||
import { logger } from '@/lib/logger';
|
||||
import { getErrorMessage } from '@/lib/errorHandler';
|
||||
import { handleError, handleNonCriticalError, getErrorMessage } from '@/lib/errorHandler';
|
||||
import { invokeWithTracking, invokeBatchWithTracking } from '@/lib/edgeFunctionTracking';
|
||||
|
||||
/**
|
||||
@@ -154,16 +153,15 @@ export async function approvePhotoSubmission(
|
||||
shouldRemoveFromQueue: true,
|
||||
};
|
||||
} catch (error: unknown) {
|
||||
const errorMessage = getErrorMessage(error);
|
||||
logger.error('Photo approval failed', {
|
||||
action: 'approve_photo',
|
||||
submissionId: config.submissionId,
|
||||
error: errorMessage
|
||||
handleError(error, {
|
||||
action: 'Approve Photo Submission',
|
||||
userId: config.moderatorId,
|
||||
metadata: { submissionId: config.submissionId }
|
||||
});
|
||||
return {
|
||||
success: false,
|
||||
message: 'Failed to approve photo submission',
|
||||
error: new Error(errorMessage),
|
||||
error: error instanceof Error ? error : new Error(getErrorMessage(error)),
|
||||
shouldRemoveFromQueue: false,
|
||||
};
|
||||
}
|
||||
@@ -194,22 +192,14 @@ export async function approveSubmissionItems(
|
||||
);
|
||||
|
||||
if (approvalError) {
|
||||
logger.error('Submission items approval failed via edge function', {
|
||||
action: 'approve_submission_items',
|
||||
submissionId,
|
||||
itemCount: itemIds.length,
|
||||
requestId,
|
||||
error: approvalError.message,
|
||||
const error = new Error(`Failed to process submission items: ${approvalError.message}`);
|
||||
handleError(error, {
|
||||
action: 'Approve Submission Items',
|
||||
metadata: { submissionId, itemCount: itemIds.length, requestId }
|
||||
});
|
||||
throw new Error(`Failed to process submission items: ${approvalError.message}`);
|
||||
throw error;
|
||||
}
|
||||
|
||||
logger.info('Submission items approved successfully', {
|
||||
action: 'approve_submission_items',
|
||||
submissionId,
|
||||
itemCount: itemIds.length,
|
||||
requestId,
|
||||
});
|
||||
|
||||
return {
|
||||
success: true,
|
||||
@@ -217,17 +207,14 @@ export async function approveSubmissionItems(
|
||||
shouldRemoveFromQueue: true,
|
||||
};
|
||||
} catch (error: unknown) {
|
||||
const errorMessage = getErrorMessage(error);
|
||||
logger.error('Submission items approval failed', {
|
||||
action: 'approve_submission_items',
|
||||
submissionId,
|
||||
itemCount: itemIds.length,
|
||||
error: errorMessage
|
||||
handleError(error, {
|
||||
action: 'Approve Submission Items',
|
||||
metadata: { submissionId, itemCount: itemIds.length }
|
||||
});
|
||||
return {
|
||||
success: false,
|
||||
message: 'Failed to approve submission items',
|
||||
error: new Error(errorMessage),
|
||||
error: error instanceof Error ? error : new Error(getErrorMessage(error)),
|
||||
shouldRemoveFromQueue: false,
|
||||
};
|
||||
}
|
||||
@@ -260,11 +247,9 @@ export async function rejectSubmissionItems(
|
||||
.eq('status', 'pending');
|
||||
|
||||
if (rejectError) {
|
||||
const errorMessage = getErrorMessage(rejectError);
|
||||
logger.error('Item rejection cascade failed', {
|
||||
action: 'reject_submission_items',
|
||||
submissionId,
|
||||
error: errorMessage
|
||||
handleError(rejectError, {
|
||||
action: 'Reject Submission Items (Cascade)',
|
||||
metadata: { submissionId }
|
||||
});
|
||||
}
|
||||
|
||||
@@ -274,16 +259,14 @@ export async function rejectSubmissionItems(
|
||||
shouldRemoveFromQueue: false, // Parent rejection will handle removal
|
||||
};
|
||||
} catch (error: unknown) {
|
||||
const errorMessage = getErrorMessage(error);
|
||||
logger.error('Submission items rejection failed', {
|
||||
action: 'reject_submission_items',
|
||||
submissionId,
|
||||
error: errorMessage
|
||||
handleError(error, {
|
||||
action: 'Reject Submission Items',
|
||||
metadata: { submissionId }
|
||||
});
|
||||
return {
|
||||
success: false,
|
||||
message: 'Failed to reject submission items',
|
||||
error: new Error(errorMessage),
|
||||
error: error instanceof Error ? error : new Error(getErrorMessage(error)),
|
||||
shouldRemoveFromQueue: false,
|
||||
};
|
||||
}
|
||||
@@ -412,17 +395,15 @@ export async function performModerationAction(
|
||||
shouldRemoveFromQueue: action === 'approved' || action === 'rejected',
|
||||
};
|
||||
} catch (error: unknown) {
|
||||
const errorMessage = getErrorMessage(error);
|
||||
logger.error('Moderation action failed', {
|
||||
action: config.action,
|
||||
itemType: item.type,
|
||||
itemId: item.id,
|
||||
error: errorMessage
|
||||
handleError(error, {
|
||||
action: `${config.action === 'approved' ? 'Approve' : 'Reject'} Content`,
|
||||
userId: config.moderatorId,
|
||||
metadata: { itemType: item.type, itemId: item.id }
|
||||
});
|
||||
return {
|
||||
success: false,
|
||||
message: `Failed to ${config.action} content`,
|
||||
error: new Error(errorMessage),
|
||||
error: error instanceof Error ? error : new Error(getErrorMessage(error)),
|
||||
shouldRemoveFromQueue: false,
|
||||
};
|
||||
}
|
||||
@@ -513,15 +494,20 @@ export async function deleteSubmission(
|
||||
const successfulDeletions = deleteResults.filter(r => !r.error);
|
||||
deletedPhotoCount = successfulDeletions.length;
|
||||
|
||||
// Log any failures
|
||||
// Log any failures silently (background operation)
|
||||
const failedDeletions = deleteResults.filter(r => r.error);
|
||||
if (failedDeletions.length > 0) {
|
||||
logger.error('Some photo deletions failed', {
|
||||
action: 'delete_submission_photos',
|
||||
failureCount: failedDeletions.length,
|
||||
totalAttempted: validImageIds.length,
|
||||
failedRequestIds: failedDeletions.map(r => r.requestId),
|
||||
});
|
||||
handleNonCriticalError(
|
||||
new Error(`Failed to delete ${failedDeletions.length} of ${validImageIds.length} photos`),
|
||||
{
|
||||
action: 'Delete Submission Photos',
|
||||
metadata: {
|
||||
failureCount: failedDeletions.length,
|
||||
totalAttempted: validImageIds.length,
|
||||
failedRequestIds: failedDeletions.map(r => r.requestId)
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -563,12 +549,15 @@ export async function deleteSubmission(
|
||||
message,
|
||||
shouldRemoveFromQueue: true,
|
||||
};
|
||||
} catch (error) {
|
||||
logger.error('Error deleting submission', { error, submissionId: item.id });
|
||||
} catch (error: unknown) {
|
||||
handleError(error, {
|
||||
action: 'Delete Submission',
|
||||
metadata: { submissionId: item.id, deletePhotos }
|
||||
});
|
||||
return {
|
||||
success: false,
|
||||
message: 'Failed to delete submission',
|
||||
error: error as Error,
|
||||
error: error instanceof Error ? error : new Error('Unknown error'),
|
||||
shouldRemoveFromQueue: false,
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user