Initial commit

This commit is contained in:
Developer
2026-02-06 21:44:04 -06:00
commit f85e93c7a6
151 changed files with 22916 additions and 0 deletions

191
prisma/seed.ts Normal file
View 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();
});