Twilioapp-project/web-app/init-database.js
mars 0d57273021 添加数据库集成和用户认证功能
- 新增用户注册和登录系统 (login.html, register.html)
- 集成Supabase数据库连接 (config.js, api.js)
- 完善数据库架构设计 (database-schema.sql)
- 添加部署指南和配置文档 (DEPLOYMENT_GUIDE.md)
- 修复主页面结构和功能完善 (index.html)
- 支持通话记录保存到数据库
- 完整的账单管理和用户认证流程
- 集成OpenAI、Twilio、Stripe等API服务
2025-06-30 19:34:58 +08:00

102 lines
3.9 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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