Fix: Approve database migration

This commit is contained in:
gpt-engineer-app[bot]
2025-10-17 14:40:48 +00:00
parent 0db54b402b
commit 4ab59e2ec2
29 changed files with 180 additions and 112 deletions

View File

@@ -1,4 +1,4 @@
import { supabase } from '@/integrations/supabase/client';
import { getErrorMessage } from '@/lib/errorHandler';
import { updateSubmissionItem, type SubmissionItemWithDeps, type DependencyConflict } from './submissionItemsService';
export interface ResolutionResult {
@@ -83,11 +83,12 @@ export async function resolveConflicts(
success: true,
updatedSelections,
};
} catch (error: any) {
console.error('Conflict resolution error:', error);
} catch (error) {
const errorMsg = getErrorMessage(error);
console.error('Conflict resolution error:', errorMsg);
return {
success: false,
error: error.message || 'Failed to resolve conflicts',
error: errorMsg,
};
}
}

View File

@@ -346,40 +346,29 @@ async function checkSlugUniqueness(
try {
console.log(`Checking slug uniqueness for "${slug}" in ${tableName}, excludeId: ${excludeId}`);
// Type-safe queries for each table
type ValidTableName = 'parks' | 'rides' | 'companies' | 'ride_models' | 'photos';
// Query with explicit table name - use simple approach to avoid type instantiation issues
let result;
// 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;
switch (tableName) {
case 'parks':
result = await supabase.from('parks').select('id').eq('slug', slug).limit(1);
break;
case 'rides':
result = await supabase.from('rides').select('id').eq('slug', slug).limit(1);
break;
case 'companies':
result = await supabase.from('companies').select('id').eq('slug', slug).limit(1);
break;
case 'ride_models':
result = await supabase.from('ride_models').select('id').eq('slug', slug).limit(1);
break;
default:
console.error(`Invalid table name: ${tableName}`);
return true; // Assume unique on invalid table
}
const { data, error } = result;
if (error) {
console.error(`Slug uniqueness check failed for ${entityType}:`, error);
return true; // Assume unique on error to avoid blocking

View File

@@ -23,10 +23,11 @@ export async function getUserIdentities(): Promise<UserIdentity[]> {
if (error) throw error;
return (data?.identities || []) as UserIdentity[];
} catch (error: any) {
} catch (error) {
const errorMsg = getErrorMessage(error);
logger.error('Failed to get user identities', {
action: 'get_identities',
error: error.message
error: errorMsg
});
return [];
}
@@ -127,15 +128,16 @@ export async function disconnectIdentity(
}
return { success: true };
} catch (error: any) {
} catch (error) {
const errorMsg = getErrorMessage(error);
logger.error('Failed to disconnect identity', {
action: 'identity_disconnect',
provider,
error: error.message
error: errorMsg
});
return {
success: false,
error: error.message || 'Failed to disconnect identity'
error: errorMsg
};
}
}
@@ -159,15 +161,16 @@ export async function connectIdentity(
if (error) throw error;
return { success: true };
} catch (error: any) {
} catch (error) {
const errorMsg = getErrorMessage(error);
logger.error('Failed to connect identity', {
action: 'identity_connect',
provider,
error: error.message
error: errorMsg
});
return {
success: false,
error: error.message || `Failed to connect ${provider} account`
error: errorMsg
};
}
}
@@ -229,14 +232,15 @@ export async function addPasswordToAccount(): Promise<IdentityOperationResult> {
needsEmailConfirmation: true,
email: userEmail
};
} catch (error: any) {
} catch (error) {
const errorMsg = getErrorMessage(error);
logger.error('Failed to initiate password setup', {
action: 'password_setup',
error: error.message
error: errorMsg
});
return {
success: false,
error: error.message || 'Failed to send password reset email'
error: errorMsg
};
}
}

View File

@@ -224,16 +224,17 @@ export async function approveSubmissionItems(
// Add to dependency map for child items
dependencyMap.set(item.id, entityId);
} catch (error: any) {
console.error(`Error approving ${item.item_type} item ${item.id}:`, error);
} catch (error) {
const errorMsg = getErrorMessage(error);
console.error(`Error approving ${item.item_type} item ${item.id}:`, errorMsg);
// Update item with error status
await updateSubmissionItem(item.id, {
status: 'rejected',
rejection_reason: `Failed to create entity: ${error.message}`,
rejection_reason: `Failed to create entity: ${errorMsg}`,
});
throw new Error(`Failed to approve ${item.item_type}: ${error.message}`);
throw new Error(`Failed to approve ${item.item_type}: ${errorMsg}`);
}
}
}