mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-20 12:31:26 -05:00
Improve error handling and environment configuration across the application
Enhance input validation, update environment variable usage for Supabase and Turnstile, and refine image upload and auth logic for better robustness and developer experience. Replit-Commit-Author: Agent Replit-Commit-Session-Id: cb061c75-702e-4b89-a8d1-77a96cdcdfbb Replit-Commit-Checkpoint-Type: intermediate_checkpoint Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/7cdf4e95-3f41-4180-b8e3-8ef56d032c0e/cb061c75-702e-4b89-a8d1-77a96cdcdfbb/ANdRXVZ
This commit is contained in:
@@ -56,6 +56,54 @@ serve(async (req) => {
|
||||
|
||||
const { itemIds, userId, submissionId }: ApprovalRequest = await req.json();
|
||||
|
||||
// UUID validation regex
|
||||
const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
||||
|
||||
// Validate itemIds
|
||||
if (!itemIds || !Array.isArray(itemIds)) {
|
||||
return new Response(
|
||||
JSON.stringify({ error: 'itemIds is required and must be an array' }),
|
||||
{ status: 400, headers: { ...corsHeaders, 'Content-Type': 'application/json' } }
|
||||
);
|
||||
}
|
||||
|
||||
if (itemIds.length === 0) {
|
||||
return new Response(
|
||||
JSON.stringify({ error: 'itemIds must be a non-empty array' }),
|
||||
{ status: 400, headers: { ...corsHeaders, 'Content-Type': 'application/json' } }
|
||||
);
|
||||
}
|
||||
|
||||
// Validate userId
|
||||
if (!userId || typeof userId !== 'string' || userId.trim() === '') {
|
||||
return new Response(
|
||||
JSON.stringify({ error: 'userId is required and must be a non-empty string' }),
|
||||
{ status: 400, headers: { ...corsHeaders, 'Content-Type': 'application/json' } }
|
||||
);
|
||||
}
|
||||
|
||||
if (!uuidRegex.test(userId)) {
|
||||
return new Response(
|
||||
JSON.stringify({ error: 'userId must be a valid UUID format' }),
|
||||
{ status: 400, headers: { ...corsHeaders, 'Content-Type': 'application/json' } }
|
||||
);
|
||||
}
|
||||
|
||||
// Validate submissionId
|
||||
if (!submissionId || typeof submissionId !== 'string' || submissionId.trim() === '') {
|
||||
return new Response(
|
||||
JSON.stringify({ error: 'submissionId is required and must be a non-empty string' }),
|
||||
{ status: 400, headers: { ...corsHeaders, 'Content-Type': 'application/json' } }
|
||||
);
|
||||
}
|
||||
|
||||
if (!uuidRegex.test(submissionId)) {
|
||||
return new Response(
|
||||
JSON.stringify({ error: 'submissionId must be a valid UUID format' }),
|
||||
{ status: 400, headers: { ...corsHeaders, 'Content-Type': 'application/json' } }
|
||||
);
|
||||
}
|
||||
|
||||
console.log('Processing selective approval:', { itemIds, userId, submissionId });
|
||||
|
||||
// Fetch all items for the submission
|
||||
@@ -84,7 +132,13 @@ serve(async (req) => {
|
||||
// Topologically sort items by dependencies
|
||||
const sortedItems = topologicalSort(items);
|
||||
const dependencyMap = new Map<string, string>();
|
||||
const approvalResults = [];
|
||||
const approvalResults: Array<{
|
||||
itemId: string;
|
||||
entityId?: string | null;
|
||||
itemType: string;
|
||||
success: boolean;
|
||||
error?: string;
|
||||
}> = [];
|
||||
|
||||
// Process items in order
|
||||
for (const item of sortedItems) {
|
||||
|
||||
Reference in New Issue
Block a user