From f979637ba3aa7c4794e67c47c10423a019117713 Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Mon, 3 Nov 2025 23:35:40 +0000 Subject: [PATCH] Fix stale references in seed data --- supabase/functions/seed-test-data/index.ts | 107 ++++++++++++++++++++- 1 file changed, 106 insertions(+), 1 deletion(-) diff --git a/supabase/functions/seed-test-data/index.ts b/supabase/functions/seed-test-data/index.ts index 699b8641..ebd0c7ca 100644 --- a/supabase/functions/seed-test-data/index.ts +++ b/supabase/functions/seed-test-data/index.ts @@ -94,6 +94,26 @@ async function registerTestEntity( } } +// Validate that submission item IDs still exist in the database +async function validateSubmissionItemIds( + supabase: any, + itemIds: string[] +): Promise { + if (itemIds.length === 0) return []; + + const { data, error } = await supabase + .from('submission_items') + .select('id') + .in('id', itemIds); + + if (error) { + edgeLogger.error('Error validating submission item IDs', { error: error.message }); + return []; + } + + return data ? data.map(item => item.id) : []; +} + async function getExistingTestEntities( supabase: any, entityType: string @@ -298,6 +318,81 @@ Deno.serve(async (req) => { pendingParks.forEach(item => createdSubmissionItems.park.push(item.id)); pendingRideModels.forEach(item => createdSubmissionItems.ride_model.push(item.id)); + // Validate all loaded submission item IDs to remove stale references + const allManufacturerIds = [...createdSubmissionItems.manufacturer]; + const validManufacturerIds = await validateSubmissionItemIds(supabase, allManufacturerIds); + createdSubmissionItems.manufacturer = validManufacturerIds; + + const allOperatorIds = [...createdSubmissionItems.operator]; + const validOperatorIds = await validateSubmissionItemIds(supabase, allOperatorIds); + createdSubmissionItems.operator = validOperatorIds; + + const allOwnerIds = [...createdSubmissionItems.property_owner]; + const validOwnerIds = await validateSubmissionItemIds(supabase, allOwnerIds); + createdSubmissionItems.property_owner = validOwnerIds; + + const allDesignerIds = [...createdSubmissionItems.designer]; + const validDesignerIds = await validateSubmissionItemIds(supabase, allDesignerIds); + createdSubmissionItems.designer = validDesignerIds; + + const allParkIds = [...createdSubmissionItems.park]; + const validParkIds = await validateSubmissionItemIds(supabase, allParkIds); + createdSubmissionItems.park = validParkIds; + + const allRideModelIds = [...createdSubmissionItems.ride_model]; + const validRideModelIds = await validateSubmissionItemIds(supabase, allRideModelIds); + createdSubmissionItems.ride_model = validRideModelIds; + + // Log if stale IDs were found + if (allManufacturerIds.length !== validManufacturerIds.length) { + edgeLogger.warn('Removed stale manufacturer submission items', { + requestId: tracking.requestId, + total: allManufacturerIds.length, + valid: validManufacturerIds.length, + removed: allManufacturerIds.length - validManufacturerIds.length + }); + } + if (allOperatorIds.length !== validOperatorIds.length) { + edgeLogger.warn('Removed stale operator submission items', { + requestId: tracking.requestId, + total: allOperatorIds.length, + valid: validOperatorIds.length, + removed: allOperatorIds.length - validOperatorIds.length + }); + } + if (allOwnerIds.length !== validOwnerIds.length) { + edgeLogger.warn('Removed stale property_owner submission items', { + requestId: tracking.requestId, + total: allOwnerIds.length, + valid: validOwnerIds.length, + removed: allOwnerIds.length - validOwnerIds.length + }); + } + if (allDesignerIds.length !== validDesignerIds.length) { + edgeLogger.warn('Removed stale designer submission items', { + requestId: tracking.requestId, + total: allDesignerIds.length, + valid: validDesignerIds.length, + removed: allDesignerIds.length - validDesignerIds.length + }); + } + if (allParkIds.length !== validParkIds.length) { + edgeLogger.warn('Removed stale park submission items', { + requestId: tracking.requestId, + total: allParkIds.length, + valid: validParkIds.length, + removed: allParkIds.length - validParkIds.length + }); + } + if (allRideModelIds.length !== validRideModelIds.length) { + edgeLogger.warn('Removed stale ride_model submission items', { + requestId: tracking.requestId, + total: allRideModelIds.length, + valid: validRideModelIds.length, + removed: allRideModelIds.length - validRideModelIds.length + }); + } + // Get slugs from pending parks for ride generation for (const item of pendingParks) { const slug = await getSubmissionSlug(supabase, 'park', item.item_data_id); @@ -759,13 +854,23 @@ Deno.serve(async (req) => { for (let i = 0; i < plan.rideModels; i++) { const level = getPopulationLevel(fieldDensity, i); + + // Ensure we have valid manufacturer submission items + if (createdSubmissionItems.manufacturer.length === 0) { + edgeLogger.error('No valid manufacturers available for ride model', { + requestId: tracking.requestId, + modelIndex: i + }); + continue; // Skip this ride model + } + const { data: mfgData } = await supabase .from('companies') .select('id') .eq('slug', randomItem(createdCompanies.manufacturer)) .maybeSingle(); - const mfgItemId = createdSubmissionItems.manufacturer.length > 0 ? randomItem(createdSubmissionItems.manufacturer) : undefined; + const mfgItemId = randomItem(createdSubmissionItems.manufacturer); const category = randomItem(['roller_coaster', 'flat_ride', 'water_ride']); const rideType = randomItem(['spinning', 'launch', 'suspended', 'family', 'standard']);