mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-22 20:51: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:
@@ -213,14 +213,19 @@ const handler = async (req: Request) => {
|
||||
console.error(`[${requestId}] Approval transaction failed:`, rpcError);
|
||||
|
||||
// Update idempotency key to failed
|
||||
await supabase
|
||||
.from('submission_idempotency_keys')
|
||||
.update({
|
||||
status: 'failed',
|
||||
error_message: rpcError.message,
|
||||
completed_at: new Date().toISOString()
|
||||
})
|
||||
.eq('idempotency_key', idempotencyKey);
|
||||
try {
|
||||
await supabase
|
||||
.from('submission_idempotency_keys')
|
||||
.update({
|
||||
status: 'failed',
|
||||
error_message: rpcError.message,
|
||||
completed_at: new Date().toISOString()
|
||||
})
|
||||
.eq('idempotency_key', idempotencyKey);
|
||||
} catch (updateError) {
|
||||
console.error(`[${requestId}] Failed to update idempotency key to failed:`, updateError);
|
||||
// Non-blocking - continue with error response even if idempotency update fails
|
||||
}
|
||||
|
||||
return new Response(
|
||||
JSON.stringify({
|
||||
@@ -229,12 +234,12 @@ const handler = async (req: Request) => {
|
||||
details: rpcError.details,
|
||||
retries: retryCount
|
||||
}),
|
||||
{
|
||||
status: 500,
|
||||
headers: {
|
||||
{
|
||||
status: 500,
|
||||
headers: {
|
||||
...corsHeaders,
|
||||
'Content-Type': 'application/json'
|
||||
}
|
||||
'Content-Type': 'application/json'
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
@@ -242,14 +247,19 @@ const handler = async (req: Request) => {
|
||||
console.log(`[${requestId}] Transaction completed successfully:`, result);
|
||||
|
||||
// STEP 8: Success - update idempotency key
|
||||
await supabase
|
||||
.from('submission_idempotency_keys')
|
||||
.update({
|
||||
status: 'completed',
|
||||
result_data: result,
|
||||
completed_at: new Date().toISOString()
|
||||
})
|
||||
.eq('idempotency_key', idempotencyKey);
|
||||
try {
|
||||
await supabase
|
||||
.from('submission_idempotency_keys')
|
||||
.update({
|
||||
status: 'completed',
|
||||
result_data: result,
|
||||
completed_at: new Date().toISOString()
|
||||
})
|
||||
.eq('idempotency_key', idempotencyKey);
|
||||
} catch (updateError) {
|
||||
console.error(`[${requestId}] Failed to update idempotency key to completed:`, updateError);
|
||||
// Non-blocking - transaction succeeded, so continue with success response
|
||||
}
|
||||
|
||||
return new Response(
|
||||
JSON.stringify(result),
|
||||
|
||||
Reference in New Issue
Block a user