Files
Benell/prisma/seed.ts
2026-03-31 13:21:48 +00:00

77 lines
2.1 KiB
TypeScript

import bcrypt from "bcryptjs";
import { PrismaClient, RoleKey } from "@prisma/client";
import { seedWeeklyKpiBaseline } from "../src/lib/kpis/persistence";
import { ensureExperienceBaseline } from "../src/lib/experienciometro/persistence";
import { ensureHumanCapitalWorkspaceBootstrap } from "../src/lib/human-capital/workspace";
const prisma = new PrismaClient();
async function main() {
const roles: Array<{ key: RoleKey; name: string }> = [
{ key: "owner", name: "Dueño" },
{ key: "leader", name: "Líder" },
{ key: "employee", name: "Empleado" },
];
for (const role of roles) {
await prisma.role.upsert({
where: { key: role.key },
update: { name: role.name },
create: role,
});
}
const ownerEmail = (process.env.BOOTSTRAP_OWNER_EMAIL ?? "owner@casabenell.com").toLowerCase().trim();
const ownerName = process.env.BOOTSTRAP_OWNER_NAME ?? "Owner Casa Benell";
const ownerPassword = process.env.BOOTSTRAP_OWNER_PASSWORD ?? "ChangeMe123!";
const ownerPasswordHash = await bcrypt.hash(ownerPassword, 12);
const owner = await prisma.user.upsert({
where: { email: ownerEmail },
update: {
name: ownerName,
passwordHash: ownerPasswordHash,
status: "active",
emailVerified: new Date(),
},
create: {
email: ownerEmail,
name: ownerName,
passwordHash: ownerPasswordHash,
status: "active",
emailVerified: new Date(),
},
});
const ownerRole = await prisma.role.findUniqueOrThrow({ where: { key: "owner" } });
await prisma.userRole.upsert({
where: {
userId_roleId: {
userId: owner.id,
roleId: ownerRole.id,
},
},
update: {},
create: {
userId: owner.id,
roleId: ownerRole.id,
},
});
await seedWeeklyKpiBaseline(prisma);
await ensureExperienceBaseline(prisma, owner.id);
await ensureHumanCapitalWorkspaceBootstrap();
console.log(`Seed ready. Owner: ${ownerEmail}`);
}
main()
.catch((error) => {
console.error(error);
process.exit(1);
})
.finally(async () => {
await prisma.$disconnect();
});