/**
* Apply M4 schema migration to Supabase
* Adds current_level column for permission graduation
*/
require('dotenv').config({ path: require('path').join(__dirname, '..', '.env') });
const { createClient } = require('@supabase/supabase-js');
const fs = require('fs');
const path = require('path');
const supabaseUrl = process.env.NEXT_PUBLIC_SUPABASE_URL;
const supabaseKey = process.env.SUPABASE_SERVICE_ROLE_KEY;
if (!supabaseUrl || !supabaseKey) {
console.error('ERROR: Missing Supabase credentials');
process.exit(1);
}
const supabase = createClient(supabaseUrl, supabaseKey);
async function applyMigration() {
console.log('[M4 Migration] Reading migration SQL...');
const migrationSql = fs.readFileSync(
path.join(__dirname, 'm4_add_current_level.sql'),
'utf8'
);
console.log('[M4 Migration] Applying migration...');
console.log(migrationSql);
// Split SQL into individual statements
const statements = migrationSql
.split(';')
.map(s => s.trim())
.filter(s => s.length > 0 && !s.startsWith('--'));
for (const statement of statements) {
if (statement.startsWith('COMMENT')) {
// Skip COMMENT statements (not supported via supabase-js)
console.log('[M4 Migration] Skipping COMMENT statement (manual execution required)');
continue;
}
console.log(`[M4 Migration] Executing: ${statement.substring(0, 50)}...`);
const { error } = await supabase.rpc('exec_sql', { sql: statement });
if (error) {
console.error(`[M4 Migration] Error: ${error.message}`);
console.log('[M4 Migration] Attempting direct execution via raw SQL...');
// Fall back to raw SQL execution
// Note: This requires a custom function in Supabase or manual execution
console.log('[M4 Migration] Please execute this SQL manually in Supabase SQL Editor:');
console.log(statement + ';');
} else {
console.log('[M4 Migration] ✓ Statement executed');
}
}
console.log('[M4 Migration] Migration complete!');
console.log('[M4 Migration] Verifying schema...');
// Verify migration by querying conversations table
const { data, error } = await supabase
.from('conversations')
.select('current_level')
.limit(1);
if (error) {
console.error('[M4 Migration] Verification failed:', error.message);
console.log('[M4 Migration] Please apply migration manually:');
console.log(migrationSql);
} else {
console.log('[M4 Migration] ✓ Schema verified - current_level column exists');
}
}
applyMigration().catch(err => {
console.error('[M4 Migration] Fatal error:', err);
process.exit(1);
});