Refactor: Implement type safety plan

This commit is contained in:
gpt-engineer-app[bot]
2025-10-17 14:35:15 +00:00
parent 921abb63a1
commit 0db54b402b
12 changed files with 290 additions and 38 deletions

View File

@@ -346,11 +346,39 @@ async function checkSlugUniqueness(
try {
console.log(`Checking slug uniqueness for "${slug}" in ${tableName}, excludeId: ${excludeId}`);
const { data, error } = await supabase
.from(tableName as any)
.select('id')
.eq('slug', slug)
.limit(1);
// Type-safe queries for each table
type ValidTableName = 'parks' | 'rides' | 'companies' | 'ride_models' | 'photos';
// Validate table name
const validTables: ValidTableName[] = ['parks', 'rides', 'companies', 'ride_models', 'photos'];
if (!validTables.includes(tableName as ValidTableName)) {
console.error(`Invalid table name: ${tableName}`);
return true; // Assume unique on invalid table
}
// Query with explicit table name
let data, error;
if (tableName === 'parks') {
const result = await supabase.from('parks').select('id').eq('slug', slug).limit(1);
data = result.data;
error = result.error;
} else if (tableName === 'rides') {
const result = await supabase.from('rides').select('id').eq('slug', slug).limit(1);
data = result.data;
error = result.error;
} else if (tableName === 'companies') {
const result = await supabase.from('companies').select('id').eq('slug', slug).limit(1);
data = result.data;
error = result.error;
} else if (tableName === 'ride_models') {
const result = await supabase.from('ride_models').select('id').eq('slug', slug).limit(1);
data = result.data;
error = result.error;
} else {
const result = await supabase.from('photos').select('id').eq('slug', slug).limit(1);
data = result.data;
error = result.error;
}
if (error) {
console.error(`Slug uniqueness check failed for ${entityType}:`, error);
@@ -364,7 +392,7 @@ async function checkSlugUniqueness(
}
// If excludeId provided and matches, it's the same entity (editing)
if (excludeId && data[0] && ((data[0] as unknown) as { id: string }).id === excludeId) {
if (excludeId && data[0] && data[0].id === excludeId) {
console.log(`Slug "${slug}" matches current entity (editing mode)`);
return true;
}