feat: Implement final error coverage

This commit is contained in:
gpt-engineer-app[bot]
2025-11-04 19:50:06 +00:00
parent a9334c7a3a
commit 0df047d56b
9 changed files with 291 additions and 403 deletions

View File

@@ -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,
};
}