Initial commit
This commit is contained in:
191
prisma/seed.ts
Normal file
191
prisma/seed.ts
Normal file
@@ -0,0 +1,191 @@
|
||||
import bcrypt from "bcryptjs";
|
||||
import { PrismaClient } from "@prisma/client";
|
||||
|
||||
const prisma = new PrismaClient();
|
||||
|
||||
async function main() {
|
||||
const adminEmail = "admin@ywyw.com";
|
||||
const customerEmail = "cust@ywyw.com";
|
||||
|
||||
const passwordHash = await bcrypt.hash("Dev1234#", 10);
|
||||
|
||||
const admin = await prisma.user.upsert({
|
||||
where: { email: adminEmail },
|
||||
update: {},
|
||||
create: {
|
||||
email: adminEmail,
|
||||
name: "Admin User",
|
||||
role: "ADMIN",
|
||||
firstName: "Admin",
|
||||
lastName: "User",
|
||||
gender: "OTHER",
|
||||
emailVerified: true,
|
||||
forcePasswordReset: false,
|
||||
isActive: true,
|
||||
},
|
||||
});
|
||||
|
||||
await prisma.credential.upsert({
|
||||
where: { userId: admin.id },
|
||||
update: { password: passwordHash },
|
||||
create: { userId: admin.id, password: passwordHash },
|
||||
});
|
||||
|
||||
console.log("✅ Admin user created:", adminEmail);
|
||||
|
||||
const customer = await prisma.user.upsert({
|
||||
where: { email: customerEmail },
|
||||
update: {},
|
||||
create: {
|
||||
email: customerEmail,
|
||||
name: "Customer User",
|
||||
role: "USER",
|
||||
firstName: "Customer",
|
||||
lastName: "User",
|
||||
gender: "OTHER",
|
||||
emailVerified: true,
|
||||
forcePasswordReset: false,
|
||||
isActive: true,
|
||||
},
|
||||
});
|
||||
|
||||
await prisma.credential.upsert({
|
||||
where: { userId: customer.id },
|
||||
update: { password: passwordHash },
|
||||
create: { userId: customer.id, password: passwordHash },
|
||||
});
|
||||
|
||||
console.log("✅ Customer user created:", customerEmail);
|
||||
|
||||
const existingWebinars = await prisma.webinar.count();
|
||||
if (existingWebinars === 0) {
|
||||
const now = Date.now();
|
||||
const sample = [
|
||||
{
|
||||
title: "Estate Planning Fundamentals",
|
||||
description: "Learn the foundations of estate planning, wills, and trusts.",
|
||||
speaker: "Emily Roberts",
|
||||
startAt: new Date(now + 7 * 86400000),
|
||||
duration: 90,
|
||||
bannerUrl: null,
|
||||
category: "Basics",
|
||||
visibility: "PUBLIC",
|
||||
isActive: true,
|
||||
capacity: 50,
|
||||
priceCents: 0,
|
||||
learningPoints: [
|
||||
"Understanding the basics of wills and trusts",
|
||||
"Key differences between revocable and irrevocable trusts",
|
||||
"Common estate planning mistakes to avoid",
|
||||
"When to update your estate plan",
|
||||
],
|
||||
meetingInfo: {},
|
||||
},
|
||||
{
|
||||
title: "Avoiding Probate: Strategies & Solutions",
|
||||
description: "Practical strategies to reduce or avoid probate delays.",
|
||||
speaker: "David Martinez",
|
||||
startAt: new Date(now + 10 * 86400000),
|
||||
duration: 75,
|
||||
bannerUrl: null,
|
||||
category: "Planning",
|
||||
visibility: "PUBLIC",
|
||||
isActive: true,
|
||||
capacity: 60,
|
||||
priceCents: 0,
|
||||
learningPoints: [
|
||||
"How probate works and why it can be costly",
|
||||
"Living trusts as probate avoidance tools",
|
||||
"Joint ownership strategies",
|
||||
"Beneficiary designations and their importance",
|
||||
],
|
||||
meetingInfo: {},
|
||||
},
|
||||
{
|
||||
title: "Tax-Efficient Estate Planning",
|
||||
description: "Minimize taxes and preserve wealth across generations.",
|
||||
speaker: "Jennifer Thompson",
|
||||
startAt: new Date(now + 14 * 86400000),
|
||||
duration: 90,
|
||||
bannerUrl: null,
|
||||
category: "Tax",
|
||||
visibility: "PUBLIC",
|
||||
isActive: true,
|
||||
capacity: 40,
|
||||
priceCents: 4900,
|
||||
learningPoints: [
|
||||
"Current federal and state estate tax exemptions",
|
||||
"Gift tax strategies and annual exclusions",
|
||||
"Charitable giving techniques for tax benefits",
|
||||
"Generation-skipping transfer tax planning",
|
||||
],
|
||||
meetingInfo: {},
|
||||
},
|
||||
{
|
||||
title: "Healthcare Directives & Powers of Attorney",
|
||||
description: "Understand advanced directives and medical decision-making.",
|
||||
speaker: "Lisa Patterson",
|
||||
startAt: new Date(now + 17 * 86400000),
|
||||
duration: 60,
|
||||
bannerUrl: null,
|
||||
category: "Healthcare",
|
||||
visibility: "PUBLIC",
|
||||
isActive: true,
|
||||
capacity: 80,
|
||||
priceCents: 0,
|
||||
learningPoints: [
|
||||
"Types of healthcare directives and their purposes",
|
||||
"Choosing the right healthcare proxy",
|
||||
"Living wills vs. healthcare powers of attorney",
|
||||
"HIPAA authorizations and medical records access",
|
||||
],
|
||||
meetingInfo: {},
|
||||
},
|
||||
{
|
||||
title: "Family Wealth Transfer (Private Session)",
|
||||
description: "Invite-only workshop for complex family asset structures.",
|
||||
speaker: "Michael Chen",
|
||||
startAt: new Date(now + 21 * 86400000),
|
||||
duration: 120,
|
||||
bannerUrl: null,
|
||||
category: "Advanced",
|
||||
visibility: "PRIVATE",
|
||||
isActive: true,
|
||||
capacity: 20,
|
||||
priceCents: 9900,
|
||||
learningPoints: [
|
||||
"Advanced trust structures for wealth preservation",
|
||||
"Family limited partnerships and LLCs",
|
||||
"Succession planning for family businesses",
|
||||
"Coordinating estate plans across multiple jurisdictions",
|
||||
],
|
||||
meetingInfo: {},
|
||||
},
|
||||
];
|
||||
|
||||
await prisma.webinar.createMany({ data: sample as any });
|
||||
console.log("✅ Sample webinars created");
|
||||
}
|
||||
|
||||
const appSetup = await prisma.appSetup.findUnique({ where: { id: 1 } });
|
||||
if (!appSetup) {
|
||||
await prisma.appSetup.create({
|
||||
data: {
|
||||
id: 1,
|
||||
googleAuthEnabled: false,
|
||||
socials: {},
|
||||
categories: ["Basics", "Planning", "Tax", "Healthcare", "Advanced"],
|
||||
},
|
||||
});
|
||||
console.log("✅ App setup row created");
|
||||
}
|
||||
}
|
||||
|
||||
main()
|
||||
.catch((e) => {
|
||||
console.error(e);
|
||||
process.exit(1);
|
||||
})
|
||||
.finally(async () => {
|
||||
await prisma.$disconnect();
|
||||
});
|
||||
Reference in New Issue
Block a user