001project_wildgrowth/backend/scripts/create-course-generation-ta...

95 lines
2.8 KiB
TypeScript
Raw Permalink Normal View History

2026-02-11 15:26:03 +08:00
/**
* 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();