102 lines
3.9 KiB
JavaScript
102 lines
3.9 KiB
JavaScript
|
// 数据库初始化脚本
|
|||
|
// 使用 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();
|
|||
|
}
|