Fix slug uniqueness validation

This commit is contained in:
gpt-engineer-app[bot]
2025-10-17 23:35:49 +00:00
parent 559b4e1e55
commit a293e48b24

View File

@@ -345,13 +345,79 @@ export async function validateEntityData(
}
}
// Check slug uniqueness (async)
// Check slug uniqueness (async) - only if slug has changed
if (validData.slug && typeof validData.slug === 'string') {
// Extract the correct ID field based on entity type
let entityId: string | undefined;
switch (entityType) {
case 'park':
entityId = typeof validData.park_id === 'string' ? validData.park_id : undefined;
break;
case 'ride':
entityId = typeof validData.ride_id === 'string' ? validData.ride_id : undefined;
break;
case 'manufacturer':
case 'designer':
case 'operator':
case 'property_owner':
entityId = typeof validData.company_id === 'string'
? validData.company_id
: (typeof validData.id === 'string' ? validData.id : undefined);
break;
case 'ride_model':
entityId = typeof validData.ride_model_id === 'string'
? validData.ride_model_id
: (typeof validData.id === 'string' ? validData.id : undefined);
break;
default:
entityId = typeof validData.id === 'string' ? validData.id : undefined;
}
// If we have an entity ID, check if slug has actually changed
let shouldCheckUniqueness = true;
if (entityId) {
const tableName = getTableNameFromEntityType(entityType);
// Use switch to avoid TypeScript type instantiation issues
let originalSlug: string | null = null;
switch (tableName) {
case 'parks': {
const { data } = await supabase.from('parks').select('slug').eq('id', entityId).single();
originalSlug = data?.slug || null;
break;
}
case 'rides': {
const { data } = await supabase.from('rides').select('slug').eq('id', entityId).single();
originalSlug = data?.slug || null;
break;
}
case 'companies': {
const { data } = await supabase.from('companies').select('slug').eq('id', entityId).single();
originalSlug = data?.slug || null;
break;
}
case 'ride_models': {
const { data } = await supabase.from('ride_models').select('slug').eq('id', entityId).single();
originalSlug = data?.slug || null;
break;
}
}
// If slug hasn't changed, skip uniqueness check
if (originalSlug && originalSlug === validData.slug) {
shouldCheckUniqueness = false;
}
}
// Only check uniqueness if this is a new entity or slug has changed
if (shouldCheckUniqueness) {
const isSlugUnique = await checkSlugUniqueness(
entityType,
validData.slug,
typeof validData.id === 'string' ? validData.id : undefined
entityId
);
if (!isSlugUnique) {
blockingErrors.push({
field: 'slug',
@@ -360,6 +426,7 @@ export async function validateEntityData(
});
}
}
}
const allErrors = [...blockingErrors, ...warnings, ...suggestions];
const isValid = blockingErrors.length === 0;