import { PrismaClient } from "../lib/generated/prisma/client"; import { Role } from "../lib/generated/prisma/enums"; import { PrismaPg } from "@prisma/adapter-pg"; import bcrypt from "bcryptjs"; import { GROUP_COLORS } from "../lib/colors"; const adapter = new PrismaPg({ connectionString: process.env.DATABASE_URL }); const prisma = new PrismaClient({ adapter }); async function main() { const passwordHash = await bcrypt.hash("password123", 12); const user = await prisma.user.upsert({ where: { email: "dev@example.com" }, update: {}, create: { email: "dev@example.com", passwordHash, name: "Dev User", role: Role.ADMIN, }, }); console.log(`Seeded user: ${user.email} (password: password123)`); const existingCategories = await prisma.category.count({ where: { userId: user.id }, }); if (existingCategories > 0) { console.log("Sample board already exists for dev user, skipping."); return; } const toDo = await prisma.category.create({ data: { name: "To Do", order: 0, userId: user.id }, }); const inProgress = await prisma.category.create({ data: { name: "In Progress", order: 1, userId: user.id }, }); const done = await prisma.category.create({ data: { name: "Done", order: 2, userId: user.id }, }); const groceries = await prisma.group.create({ data: { title: "Groceries", color: GROUP_COLORS[0].key, order: 0, categoryId: toDo.id, noteContent: "## Weekly groceries\n\nDon't forget reusable bags!", }, }); await prisma.todo.createMany({ data: [ { title: "Milk", order: 0, groupId: groceries.id }, { title: "Eggs", order: 1, groupId: groceries.id }, { title: "Bread", order: 2, groupId: groceries.id, completed: true }, ], }); const homeProject = await prisma.group.create({ data: { title: "Garage cleanup", color: GROUP_COLORS[4].key, order: 0, categoryId: inProgress.id, noteContent: "Sort boxes into keep / donate / trash piles.", }, }); await prisma.todo.createMany({ data: [ { title: "Sort tools", order: 0, groupId: homeProject.id }, { title: "Donate old bikes", order: 1, groupId: homeProject.id, details: "Call the community center about pickup times.", }, ], }); const taxes = await prisma.group.create({ data: { title: "2025 taxes", color: GROUP_COLORS[6].key, order: 0, categoryId: done.id, }, }); await prisma.todo.createMany({ data: [ { title: "Gather receipts", order: 0, groupId: taxes.id, completed: true }, { title: "File return", order: 1, groupId: taxes.id, completed: true }, ], }); console.log("Seeded sample board (3 categories, 3 groups, 7 to-dos)."); } main() .catch((e) => { console.error(e); process.exitCode = 1; }) .finally(async () => { await prisma.$disconnect(); });