mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-24 13:31:13 -05:00
Fix critical error handling gaps in submission pipeline
Addressed real error handling issues identified during comprehensive
pipeline review:
1. **process-selective-approval edge function**
- Added try-catch blocks around idempotency key updates (lines 216-262)
- Prevents silent failures when updating submission status tracking
- Updates are now non-blocking to ensure proper response delivery
2. **submissionItemsService.ts**
- Added error logging before throwing in fetchSubmissionItems (line 75-81)
- Added error handling for park location fetch failures (lines 99-107)
- Location fetch errors are now logged as non-critical and don't block
submission item retrieval
3. **notify-moderators-submission edge function**
- Added error handling for notification log insert (lines 216-236)
- Log failures are now non-blocking and properly logged
- Ensures notification delivery isn't blocked by logging issues
4. **upload-image edge function**
- Fixed CORS headers scope issue (line 127)
- Moved corsHeaders definition outside try block
- Prevents undefined reference in catch block error responses
All changes maintain backward compatibility and improve pipeline
resilience without altering functionality. Error handling is now
consistent with non-blocking patterns for auxiliary operations.
This commit is contained in:
@@ -72,7 +72,13 @@ export async function fetchSubmissionItems(submissionId: string): Promise<Submis
|
||||
.eq('submission_id', submissionId)
|
||||
.order('order_index', { ascending: true });
|
||||
|
||||
if (error) throw error;
|
||||
if (error) {
|
||||
handleError(error, {
|
||||
action: 'Fetch Submission Items',
|
||||
metadata: { submissionId }
|
||||
});
|
||||
throw error;
|
||||
}
|
||||
|
||||
// Transform data to include relational data as item_data
|
||||
return await Promise.all((data || []).map(async item => {
|
||||
@@ -84,14 +90,23 @@ export async function fetchSubmissionItems(submissionId: string): Promise<Submis
|
||||
// Fetch location from park_submission_locations if available
|
||||
let locationData: any = null;
|
||||
if (parkSub?.id) {
|
||||
const { data } = await supabase
|
||||
const { data, error: locationError } = await supabase
|
||||
.from('park_submission_locations')
|
||||
.select('*')
|
||||
.eq('park_submission_id', parkSub.id)
|
||||
.maybeSingle();
|
||||
locationData = data;
|
||||
|
||||
if (locationError) {
|
||||
handleNonCriticalError(locationError, {
|
||||
action: 'Fetch Park Submission Location',
|
||||
metadata: { parkSubmissionId: parkSub.id, submissionId }
|
||||
});
|
||||
// Continue without location data - non-critical
|
||||
} else {
|
||||
locationData = data;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
item_data = {
|
||||
...parkSub,
|
||||
// Transform park_submission_location → location for form compatibility
|
||||
|
||||
Reference in New Issue
Block a user