Twilioapp-project/web-app/init-database.js

102 lines
3.9 KiB
JavaScript
Raw Normal View History

// 数据库初始化脚本
// 使用 Node.js 运行: node init-database.js
const { createClient } = require('@supabase/supabase-js');
const fs = require('fs');
const path = require('path');
// 配置信息
const SUPABASE_URL = 'https://poxwjzdianersitpnvdy.supabase.co';
const SUPABASE_SERVICE_KEY = 'YOUR_SERVICE_ROLE_KEY_HERE'; // 需要替换为实际的 Service Role Key
async function initializeDatabase() {
console.log('🚀 开始初始化 Twilio-project 数据库...');
try {
// 创建 Supabase 客户端(使用 Service Role Key
const supabase = createClient(SUPABASE_URL, SUPABASE_SERVICE_KEY);
// 读取 SQL 初始化脚本
const sqlScript = fs.readFileSync(path.join(__dirname, 'database-init.sql'), 'utf8');
// 将 SQL 脚本分割成单独的语句
const statements = sqlScript
.split(';')
.map(stmt => stmt.trim())
.filter(stmt => stmt.length > 0 && !stmt.startsWith('--'));
console.log(`📝 准备执行 ${statements.length} 条 SQL 语句...`);
// 逐条执行 SQL 语句
for (let i = 0; i < statements.length; i++) {
const statement = statements[i];
if (statement.includes('SELECT') && statement.includes('status')) {
continue; // 跳过状态检查语句
}
console.log(`⏳ 执行语句 ${i + 1}/${statements.length}...`);
try {
const { data, error } = await supabase.rpc('exec_sql', {
sql_query: statement + ';'
});
if (error) {
console.warn(`⚠️ 语句 ${i + 1} 执行警告:`, error.message);
} else {
console.log(`✅ 语句 ${i + 1} 执行成功`);
}
} catch (err) {
console.warn(`⚠️ 语句 ${i + 1} 执行出错:`, err.message);
}
}
// 验证表是否创建成功
console.log('\n🔍 验证数据库表...');
const { data: tables, error: tablesError } = await supabase
.from('information_schema.tables')
.select('table_name')
.eq('table_schema', 'public');
if (tablesError) {
console.error('❌ 无法获取表列表:', tablesError);
} else {
console.log('✅ 数据库表创建成功:');
tables.forEach(table => {
console.log(` - ${table.table_name}`);
});
}
console.log('\n🎉 数据库初始化完成!');
console.log('\n📋 创建的表包括:');
console.log(' • user_profiles - 用户档案');
console.log(' • translator_profiles - 翻译员档案');
console.log(' • call_records - 通话记录');
console.log(' • appointments - 预约管理');
console.log(' • document_translations - 文档翻译');
console.log(' • payments - 支付记录');
console.log(' • system_settings - 系统设置');
} catch (error) {
console.error('❌ 数据库初始化失败:', error);
process.exit(1);
}
}
// 手动执行 SQL 的替代方法
async function manualInit() {
console.log('\n📖 手动初始化指南:');
console.log('1. 访问 Supabase 控制台: https://supabase.com/dashboard/project/poxwjzdianersitpnvdy');
console.log('2. 进入 SQL Editor');
console.log('3. 复制并执行 database-init.sql 文件中的内容');
console.log('4. 确认所有表都创建成功');
}
// 检查是否提供了 Service Role Key
if (SUPABASE_SERVICE_KEY === 'YOUR_SERVICE_ROLE_KEY_HERE') {
console.log('⚠️ 请先在脚本中设置正确的 SUPABASE_SERVICE_KEY');
manualInit();
} else {
initializeDatabase();
}