95 lines
2.8 KiB
TypeScript
95 lines
2.8 KiB
TypeScript
|
|
/**
|
||
|
|
* 直接创建 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();
|