/** * 直接创建 course_generation_tasks 表的脚本 * 用于绕过 Prisma 迁移问题 */ import { PrismaClient } from '@prisma/client'; import prisma from '../src/utils/prisma'; async function createTable() { try { console.log('开始创建 course_generation_tasks 表...'); await prisma.$executeRawUnsafe(` CREATE TABLE IF NOT EXISTS "course_generation_tasks" ( "id" TEXT NOT NULL, "course_id" TEXT NOT NULL, "user_id" TEXT NOT NULL, "source_text" TEXT NOT NULL, "mode" TEXT, "model_provider" TEXT NOT NULL DEFAULT 'doubao', "status" TEXT NOT NULL DEFAULT 'pending', "progress" INTEGER NOT NULL DEFAULT 0, "error_message" TEXT, "outline" JSONB, "current_step" TEXT, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT "course_generation_tasks_pkey" PRIMARY KEY ("id") ); `); console.log('✅ 表创建成功'); // 创建索引 await prisma.$executeRawUnsafe(` CREATE INDEX IF NOT EXISTS "course_generation_tasks_user_id_idx" ON "course_generation_tasks"("user_id"); `); await prisma.$executeRawUnsafe(` CREATE INDEX IF NOT EXISTS "course_generation_tasks_status_idx" ON "course_generation_tasks"("status"); `); await prisma.$executeRawUnsafe(` CREATE UNIQUE INDEX IF NOT EXISTS "course_generation_tasks_course_id_key" ON "course_generation_tasks"("course_id"); `); console.log('✅ 索引创建成功'); // 创建外键 await prisma.$executeRawUnsafe(` DO $$ BEGIN IF NOT EXISTS ( SELECT 1 FROM pg_constraint WHERE conname = 'course_generation_tasks_course_id_fkey' ) THEN ALTER TABLE "course_generation_tasks" ADD CONSTRAINT "course_generation_tasks_course_id_fkey" FOREIGN KEY ("course_id") REFERENCES "courses"("id") ON DELETE CASCADE ON UPDATE CASCADE; END IF; END $$; `); await prisma.$executeRawUnsafe(` DO $$ BEGIN IF NOT EXISTS ( SELECT 1 FROM pg_constraint WHERE conname = 'course_generation_tasks_user_id_fkey' ) THEN ALTER TABLE "course_generation_tasks" ADD CONSTRAINT "course_generation_tasks_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE; END IF; END $$; `); console.log('✅ 外键创建成功'); console.log('✅ 所有操作完成!'); } catch (error: any) { console.error('❌ 创建表失败:', error.message); throw error; } finally { await prisma.$disconnect(); } } createTable();