mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-20 11:11:16 -05:00
Fix stale references in seed data
This commit is contained in:
@@ -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<string[]> {
|
||||
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']);
|
||||
|
||||
Reference in New Issue
Block a user