130 lines
3.0 KiB
TypeScript
130 lines
3.0 KiB
TypeScript
// prisma/seed.ts
|
|
import { PrismaClient } from "@prisma/client";
|
|
const prisma = new PrismaClient();
|
|
|
|
async function main() {
|
|
console.log("🌱 Seeding database…");
|
|
|
|
// --- Create a test course ---
|
|
const course = await prisma.course.upsert({
|
|
where: { code: "ANIM101" },
|
|
update: {},
|
|
create: {
|
|
code: "ANIM101",
|
|
title: "3D Animation | Character Design",
|
|
description: "Introductory course for animation students.",
|
|
},
|
|
});
|
|
|
|
// --- Create playlists for this course ---
|
|
const playlist1 = await prisma.playlist.create({
|
|
data: {
|
|
title: "Introduction to Character Design",
|
|
description: "Basic foundations and workflow.",
|
|
sortOrder: 0,
|
|
courseId: course.id,
|
|
videos: {
|
|
create: [
|
|
{
|
|
title: "Welcome + Overview",
|
|
index: 0,
|
|
durationSec: 300,
|
|
url: "/videos/test.mp4",
|
|
thumbnail: "/01.jpg",
|
|
},
|
|
{
|
|
title: "Understanding Silhouette",
|
|
index: 1,
|
|
durationSec: 420,
|
|
url: "/videos/test.mp4",
|
|
thumbnail: "/01.jpg",
|
|
},
|
|
{
|
|
title: "Gesture & Appeal",
|
|
index: 2,
|
|
durationSec: 380,
|
|
url: "/videos/test.mp4",
|
|
thumbnail: "/01.jpg",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
include: { videos: true },
|
|
});
|
|
|
|
const playlist2 = await prisma.playlist.create({
|
|
data: {
|
|
title: "Advanced Character Techniques",
|
|
description: "Secondary forms, expression & posing.",
|
|
sortOrder: 1,
|
|
courseId: course.id,
|
|
videos: {
|
|
create: [
|
|
{
|
|
title: "Secondary Motion",
|
|
index: 0,
|
|
durationSec: 400,
|
|
url: "/videos/test.mp4",
|
|
thumbnail: "/01.jpg",
|
|
},
|
|
{
|
|
title: "Expressions & Acting Choices",
|
|
index: 1,
|
|
durationSec: 600,
|
|
url: "/videos/test.mp4",
|
|
thumbnail: "/01.jpg",
|
|
locked: true,
|
|
},
|
|
{
|
|
title: "Polish & Finishing",
|
|
index: 2,
|
|
durationSec: 500,
|
|
url: "/videos/test.mp4",
|
|
thumbnail: "/01.jpg",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
include: { videos: true },
|
|
});
|
|
|
|
// --- Create a test user ---
|
|
const user = await prisma.user.upsert({
|
|
where: { email: "student@example.com" },
|
|
update: {},
|
|
create: {
|
|
email: "student@example.com",
|
|
name: "Test Student",
|
|
image: null,
|
|
},
|
|
});
|
|
|
|
// --- Enroll test user into the course ---
|
|
await prisma.enrollment.upsert({
|
|
where: {
|
|
userId_courseId: {
|
|
userId: user.id,
|
|
courseId: course.id,
|
|
},
|
|
},
|
|
update: {},
|
|
create: {
|
|
userId: user.id,
|
|
courseId: course.id,
|
|
},
|
|
});
|
|
|
|
console.log("🌱 Seed complete!");
|
|
console.log("Test user:", user.email);
|
|
console.log("Course created:", course.title);
|
|
}
|
|
|
|
main()
|
|
.catch((e) => {
|
|
console.error(e);
|
|
process.exit(1);
|
|
})
|
|
.finally(async () => {
|
|
await prisma.$disconnect();
|
|
});
|