192 lines
5.6 KiB
TypeScript
192 lines
5.6 KiB
TypeScript
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();
|
|
});
|