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

171
prisma/seed.mjs Normal file
View File

@@ -0,0 +1,171 @@
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 Wealth Transfer",
description: "Minimize taxes when transferring assets to heirs.",
speaker: "Susan Chen",
startAt: new Date(now + 14 * 86400000),
duration: 60,
bannerUrl: null,
category: "Advanced",
visibility: "PUBLIC",
isActive: true,
capacity: 40,
priceCents: 0,
learningPoints: [
"Federal and state estate tax basics",
"Gift tax exclusions and lifetime exemptions",
"Charitable giving strategies",
"Generation-skipping transfer tax considerations",
],
meetingInfo: {},
},
];
for (const w of sample) {
await prisma.webinar.create({ data: w });
}
console.log(`✅ Created ${sample.length} sample webinars`);
} else {
console.log(` Skipped webinar seeding - ${existingWebinars} already exist`);
}
const existingRegistrations = await prisma.webinarRegistration.count();
if (existingRegistrations === 0) {
const webinars = await prisma.webinar.findMany({ take: 2 });
if (webinars.length >= 2) {
await prisma.webinarRegistration.create({
data: {
userId: customer.id,
webinarId: webinars[0].id,
status: "CONFIRMED",
},
});
await prisma.webinarRegistration.create({
data: {
userId: customer.id,
webinarId: webinars[1].id,
status: "CONFIRMED",
},
});
console.log("✅ Created sample registrations for customer");
}
} else {
console.log(` Skipped registration seeding - ${existingRegistrations} already exist`);
}
}
main()
.then(async () => {
await prisma.$disconnect();
console.log("✅ Seeding completed successfully");
})
.catch(async (e) => {
console.error("❌ Seeding failed:", e);
await prisma.$disconnect();
process.exit(1);
});