From f09c79d7d08512d9590b1f406b8a97b02e458734 Mon Sep 17 00:00:00 2001 From: AI Clinical Dev Team Date: Sun, 12 Oct 2025 09:51:11 +0800 Subject: [PATCH] feat: add migration scripts --- backend/migrations/add_general_chat.sql | 46 +++++++++++++++++++++++++ backend/run-migration.ps1 | 45 ++++++++++++++++++++++++ 2 files changed, 91 insertions(+) create mode 100644 backend/migrations/add_general_chat.sql create mode 100644 backend/run-migration.ps1 diff --git a/backend/migrations/add_general_chat.sql b/backend/migrations/add_general_chat.sql new file mode 100644 index 00000000..91330c21 --- /dev/null +++ b/backend/migrations/add_general_chat.sql @@ -0,0 +1,46 @@ +-- 添加通用对话表 +-- 执行日期: 2025-10-11 +-- 用途: 支持无项目/无智能体的纯AI对话功能 + +-- 1. 创建通用对话表 +CREATE TABLE IF NOT EXISTS general_conversations ( + id VARCHAR(36) PRIMARY KEY, + user_id VARCHAR(36) NOT NULL, + title VARCHAR(255) NOT NULL, + model_name VARCHAR(50), + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted_at TIMESTAMP, + + FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE +); + +-- 2. 创建通用消息表 +CREATE TABLE IF NOT EXISTS general_messages ( + id VARCHAR(36) PRIMARY KEY, + conversation_id VARCHAR(36) NOT NULL, + role VARCHAR(20) NOT NULL, + content TEXT NOT NULL, + model VARCHAR(50), + metadata JSONB, + tokens INTEGER, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + + FOREIGN KEY (conversation_id) REFERENCES general_conversations(id) ON DELETE CASCADE +); + +-- 3. 创建索引 +CREATE INDEX IF NOT EXISTS idx_general_conversations_user_id ON general_conversations(user_id); +CREATE INDEX IF NOT EXISTS idx_general_conversations_created_at ON general_conversations(created_at); +CREATE INDEX IF NOT EXISTS idx_general_conversations_updated_at ON general_conversations(updated_at); + +CREATE INDEX IF NOT EXISTS idx_general_messages_conversation_id ON general_messages(conversation_id); +CREATE INDEX IF NOT EXISTS idx_general_messages_created_at ON general_messages(created_at); + +-- 4. 验证表已创建 +SELECT 'general_conversations表已创建' AS status +WHERE EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'general_conversations'); + +SELECT 'general_messages表已创建' AS status +WHERE EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'general_messages'); + diff --git a/backend/run-migration.ps1 b/backend/run-migration.ps1 new file mode 100644 index 00000000..4b24f383 --- /dev/null +++ b/backend/run-migration.ps1 @@ -0,0 +1,45 @@ +# 运行数据库迁移 +# 用途: 添加general_conversations和general_messages表 + +Write-Host "========================================" -ForegroundColor Cyan +Write-Host " 执行数据库迁移: 添加通用对话表" -ForegroundColor Cyan +Write-Host "========================================" -ForegroundColor Cyan +Write-Host "" + +# 读取.env获取数据库连接信息 +$envFile = Get-Content .env +$dbUrl = ($envFile | Select-String "DATABASE_URL").ToString().Split('=')[1].Trim() + +Write-Host "📦 数据库URL: $($dbUrl.Substring(0, 30))..." -ForegroundColor Yellow +Write-Host "" + +# 使用Prisma db push(开发环境最快) +Write-Host "[1/2] 同步数据库Schema..." -ForegroundColor Green +npx prisma db push --skip-generate + +if ($LASTEXITCODE -eq 0) { + Write-Host "✅ Schema同步成功!" -ForegroundColor Green + Write-Host "" + + Write-Host "[2/2] 生成Prisma Client..." -ForegroundColor Green + npx prisma generate + + if ($LASTEXITCODE -eq 0) { + Write-Host "✅ Prisma Client生成成功!" -ForegroundColor Green + Write-Host "" + Write-Host "========================================" -ForegroundColor Cyan + Write-Host " ✅ 迁移完成!请重启后端服务" -ForegroundColor Cyan + Write-Host "========================================" -ForegroundColor Cyan + } else { + Write-Host "❌ Prisma Client生成失败" -ForegroundColor Red + } +} else { + Write-Host "❌ Schema同步失败,请检查数据库连接" -ForegroundColor Red + Write-Host "" + Write-Host "💡 提示:请确保PostgreSQL服务正在运行" -ForegroundColor Yellow +} + +Write-Host "" +Write-Host "按任意键退出..." +$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") +