feat: Implement entity creation functions

This commit is contained in:
gpt-engineer-app[bot]
2025-09-30 14:39:08 +00:00
parent 337552224b
commit 40f20e5850
3 changed files with 479 additions and 42 deletions

66
src/lib/slugUtils.ts Normal file
View File

@@ -0,0 +1,66 @@
import { supabase } from '@/integrations/supabase/client';
/**
* Generate a URL-safe slug from a name
*/
export function generateSlugFromName(name: string): string {
return name
.toLowerCase()
.replace(/[^a-z0-9\s-]/g, '')
.replace(/\s+/g, '-')
.replace(/-+/g, '-')
.trim();
}
/**
* Ensure slug is unique by checking database and appending number if needed
*/
export async function ensureUniqueSlug(
baseSlug: string,
tableName: 'parks' | 'rides' | 'companies' | 'ride_models',
excludeId?: string
): Promise<string> {
let slug = baseSlug;
let counter = 1;
while (true) {
// Check if slug exists
let query = supabase
.from(tableName)
.select('id')
.eq('slug', slug);
// Exclude current record when editing
if (excludeId) {
query = query.neq('id', excludeId);
}
const { data, error } = await query.limit(1);
if (error) {
console.error(`Error checking slug uniqueness in ${tableName}:`, error);
throw error;
}
// If no match found, slug is unique
if (!data || data.length === 0) {
return slug;
}
// Append counter and try again
counter++;
slug = `${baseSlug}-${counter}`;
}
}
/**
* Generate and ensure unique slug in one operation
*/
export async function generateUniqueSlug(
name: string,
tableName: 'parks' | 'rides' | 'companies' | 'ride_models',
excludeId?: string
): Promise<string> {
const baseSlug = generateSlugFromName(name);
return ensureUniqueSlug(baseSlug, tableName, excludeId);
}