272 lines
7.0 KiB
TypeScript
272 lines
7.0 KiB
TypeScript
import { PrismaClient } from '@prisma/client';
|
||
import dotenv from 'dotenv';
|
||
|
||
// 加载环境变量
|
||
dotenv.config();
|
||
|
||
const prisma = new PrismaClient();
|
||
|
||
async function main() {
|
||
console.log('🌱 开始插入小节课测试数据...');
|
||
|
||
try {
|
||
// ============================================================
|
||
// 小节课 1:5分钟时间管理
|
||
// ============================================================
|
||
const course1 = await prisma.course.upsert({
|
||
where: { id: 'course_single_001' },
|
||
update: {
|
||
title: '5分钟时间管理',
|
||
type: 'single',
|
||
totalNodes: 1,
|
||
},
|
||
create: {
|
||
id: 'course_single_001',
|
||
title: '5分钟时间管理',
|
||
type: 'single',
|
||
totalNodes: 1,
|
||
},
|
||
});
|
||
|
||
const node1 = await prisma.courseNode.upsert({
|
||
where: { id: 'node_single_001' },
|
||
update: {
|
||
courseId: course1.id,
|
||
title: '时间管理的核心原则',
|
||
orderIndex: 0,
|
||
},
|
||
create: {
|
||
id: 'node_single_001',
|
||
courseId: course1.id,
|
||
title: '时间管理的核心原则',
|
||
orderIndex: 0,
|
||
},
|
||
});
|
||
|
||
// 删除现有幻灯片(如果存在)
|
||
await prisma.nodeSlide.deleteMany({
|
||
where: { nodeId: node1.id },
|
||
});
|
||
|
||
// 创建幻灯片
|
||
const slides1 = [
|
||
{
|
||
id: 'slide_single_001_01',
|
||
nodeId: node1.id,
|
||
slideType: 'text',
|
||
orderIndex: 1,
|
||
content: {
|
||
title: '5分钟时间管理',
|
||
paragraphs: [
|
||
'欢迎学习时间管理核心原则',
|
||
'让我们快速掌握高效的时间管理方法',
|
||
],
|
||
},
|
||
effect: 'fade_in',
|
||
},
|
||
{
|
||
id: 'slide_single_001_02',
|
||
nodeId: node1.id,
|
||
slideType: 'text',
|
||
orderIndex: 2,
|
||
content: {
|
||
title: '核心原则',
|
||
paragraphs: [
|
||
'1. 优先级排序:重要且紧急的事情优先',
|
||
'2. 番茄工作法:25分钟专注,5分钟休息',
|
||
'3. 时间块:为每个任务分配固定时间',
|
||
],
|
||
},
|
||
effect: 'fade_in',
|
||
},
|
||
{
|
||
id: 'slide_single_001_03',
|
||
nodeId: node1.id,
|
||
slideType: 'text',
|
||
orderIndex: 3,
|
||
content: {
|
||
title: '实践要点',
|
||
paragraphs: [
|
||
'每天早上列出今日最重要的3件事',
|
||
'使用番茄钟保持专注',
|
||
'每天晚上回顾完成情况',
|
||
],
|
||
},
|
||
effect: 'fade_in',
|
||
},
|
||
{
|
||
id: 'slide_single_001_04',
|
||
nodeId: node1.id,
|
||
slideType: 'text',
|
||
orderIndex: 4,
|
||
content: {
|
||
title: '本节小结',
|
||
paragraphs: [
|
||
'你已经完成了「时间管理的核心原则」的学习',
|
||
'记住:高效的时间管理需要持续练习',
|
||
'每天进步一点点,最终会带来巨大的改变',
|
||
],
|
||
},
|
||
effect: 'fade_in',
|
||
},
|
||
];
|
||
|
||
for (const slide of slides1) {
|
||
await prisma.nodeSlide.upsert({
|
||
where: { id: slide.id },
|
||
update: slide,
|
||
create: slide,
|
||
});
|
||
}
|
||
|
||
console.log('✅ 小节课 1 创建成功:5分钟时间管理');
|
||
|
||
// ============================================================
|
||
// 小节课 2:3分钟学会专注
|
||
// ============================================================
|
||
const course2 = await prisma.course.upsert({
|
||
where: { id: 'course_single_002' },
|
||
update: {
|
||
title: '3分钟学会专注',
|
||
type: 'single',
|
||
totalNodes: 1,
|
||
},
|
||
create: {
|
||
id: 'course_single_002',
|
||
title: '3分钟学会专注',
|
||
type: 'single',
|
||
totalNodes: 1,
|
||
},
|
||
});
|
||
|
||
const node2 = await prisma.courseNode.upsert({
|
||
where: { id: 'node_single_002' },
|
||
update: {
|
||
courseId: course2.id,
|
||
title: '专注力的训练方法',
|
||
orderIndex: 0,
|
||
},
|
||
create: {
|
||
id: 'node_single_002',
|
||
courseId: course2.id,
|
||
title: '专注力的训练方法',
|
||
orderIndex: 0,
|
||
},
|
||
});
|
||
|
||
// 删除现有幻灯片(如果存在)
|
||
await prisma.nodeSlide.deleteMany({
|
||
where: { nodeId: node2.id },
|
||
});
|
||
|
||
// 创建幻灯片
|
||
const slides2 = [
|
||
{
|
||
id: 'slide_single_002_01',
|
||
nodeId: node2.id,
|
||
slideType: 'text',
|
||
orderIndex: 1,
|
||
content: {
|
||
title: '3分钟学会专注',
|
||
paragraphs: [
|
||
'欢迎学习专注力的训练方法',
|
||
'让我们快速掌握提升专注力的技巧',
|
||
],
|
||
},
|
||
effect: 'fade_in',
|
||
},
|
||
{
|
||
id: 'slide_single_002_02',
|
||
nodeId: node2.id,
|
||
slideType: 'text',
|
||
orderIndex: 2,
|
||
content: {
|
||
title: '专注的原理',
|
||
paragraphs: [
|
||
'专注力是一种可以训练的能力',
|
||
'大脑需要时间进入专注状态(约15分钟)',
|
||
'减少干扰是提升专注的关键',
|
||
],
|
||
},
|
||
effect: 'fade_in',
|
||
},
|
||
{
|
||
id: 'slide_single_002_03',
|
||
nodeId: node2.id,
|
||
slideType: 'text',
|
||
orderIndex: 3,
|
||
content: {
|
||
title: '实用技巧',
|
||
paragraphs: [
|
||
'关闭所有通知和干扰源',
|
||
'设置专门的专注时间和空间',
|
||
'使用深呼吸帮助快速进入专注状态',
|
||
],
|
||
},
|
||
effect: 'fade_in',
|
||
},
|
||
{
|
||
id: 'slide_single_002_04',
|
||
nodeId: node2.id,
|
||
slideType: 'text',
|
||
orderIndex: 4,
|
||
content: {
|
||
title: '本节小结',
|
||
paragraphs: [
|
||
'你已经完成了「专注力的训练方法」的学习',
|
||
'记住:专注力需要持续练习',
|
||
'从每天15分钟开始,逐步提升专注时长',
|
||
],
|
||
},
|
||
effect: 'fade_in',
|
||
},
|
||
];
|
||
|
||
for (const slide of slides2) {
|
||
await prisma.nodeSlide.upsert({
|
||
where: { id: slide.id },
|
||
update: slide,
|
||
create: slide,
|
||
});
|
||
}
|
||
|
||
console.log('✅ 小节课 2 创建成功:3分钟学会专注');
|
||
|
||
// 验证数据
|
||
const courses = await prisma.course.findMany({
|
||
where: { type: 'single' },
|
||
include: {
|
||
nodes: {
|
||
include: {
|
||
slides: true,
|
||
},
|
||
},
|
||
},
|
||
});
|
||
|
||
console.log('\n📊 验证数据:');
|
||
for (const course of courses) {
|
||
console.log(`\n课程:${course.title} (${course.id})`);
|
||
for (const node of course.nodes) {
|
||
console.log(` - 节点:${node.title} (${node.id})`);
|
||
console.log(` - 幻灯片数量:${node.slides.length}`);
|
||
}
|
||
}
|
||
|
||
console.log('\n🎉 小节课测试数据插入完成!');
|
||
} catch (error) {
|
||
console.error('❌ 插入数据失败:', error);
|
||
throw error;
|
||
}
|
||
}
|
||
|
||
main()
|
||
.catch((e) => {
|
||
console.error('❌ 执行失败:', e);
|
||
process.exit(1);
|
||
})
|
||
.finally(async () => {
|
||
await prisma.$disconnect();
|
||
});
|
||
|