108 lines
2.9 KiB
TypeScript
108 lines
2.9 KiB
TypeScript
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();
|
|
});
|