Files
blackcanyontickets/setup-schema.mjs
2025-07-08 12:31:31 -06:00

67 lines
1.8 KiB
JavaScript

import { createClient } from '@supabase/supabase-js';
import fs from 'fs';
import path from 'path';
import dotenv from 'dotenv';
dotenv.config();
const supabaseUrl = process.env.SUPABASE_URL;
const supabaseKey = process.env.SUPABASE_SERVICE_KEY;
if (!supabaseUrl || !supabaseKey) {
console.error('Missing required environment variables: SUPABASE_URL and SUPABASE_SERVICE_KEY');
process.exit(1);
}
const supabase = createClient(supabaseUrl, supabaseKey);
async function runSQLFile(filename) {
console.log(`Running: ${filename}`);
try {
const migrationPath = path.join(process.cwd(), 'supabase/migrations', filename);
const sql = fs.readFileSync(migrationPath, 'utf8');
// Split SQL into individual statements
const statements = sql.split(';').filter(stmt => stmt.trim());
for (const statement of statements) {
if (statement.trim()) {
const { error } = await supabase.rpc('exec_sql', { sql: statement.trim() + ';' });
if (error) {
console.error(`Error in ${filename}:`, error);
return false;
}
}
}
console.log(`${filename} completed`);
return true;
} catch (err) {
console.error(`Error reading ${filename}:`, err.message);
return false;
}
}
async function setupSchema() {
console.log('Setting up database schema...');
const migrations = [
'001_initial_schema.sql',
'002_add_fee_structure.sql',
'003_add_seating_and_ticket_types.sql',
'004_add_admin_system.sql'
];
for (const migration of migrations) {
const success = await runSQLFile(migration);
if (!success) {
console.error(`Failed: ${migration}`);
process.exit(1);
}
}
console.log('✓ All migrations completed!');
}
setupSchema().catch(console.error);