93ad1cb8c1
Estructura inicial con Next.js 14, PostgreSQL/Prisma 7, autenticación por magic link (clientes) y JWT (admins), lógica de scheduling con 4 slots paralelos y API routes completas para cliente y panel admin. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
52 lines
1.4 KiB
TypeScript
52 lines
1.4 KiB
TypeScript
import { PrismaClient } from "@prisma/client";
|
|
import bcrypt from "bcryptjs";
|
|
|
|
const prisma = new PrismaClient();
|
|
|
|
async function main() {
|
|
const hash = (pwd: string) => bcrypt.hash(pwd, 10);
|
|
|
|
await prisma.admin.upsert({
|
|
where: { email: "jefe1@taller.com" },
|
|
update: {},
|
|
create: {
|
|
email: "jefe1@taller.com",
|
|
nombre: "Jefe 1",
|
|
passwordHash: await hash("jefe1password"),
|
|
},
|
|
});
|
|
|
|
await prisma.admin.upsert({
|
|
where: { email: "jefe2@taller.com" },
|
|
update: {},
|
|
create: {
|
|
email: "jefe2@taller.com",
|
|
nombre: "Jefe 2",
|
|
passwordHash: await hash("jefe2password"),
|
|
},
|
|
});
|
|
|
|
// Tipos de servicio de ejemplo
|
|
const servicios = [
|
|
{ nombre: "Cambio de aceite y filtro", duracionHoras: 1 },
|
|
{ nombre: "Cambio de bujías", duracionHoras: 1 },
|
|
{ nombre: "Cambio de frenos", duracionHoras: 2 },
|
|
{ nombre: "Alineación y balanceo", duracionHoras: 1.5 },
|
|
{ nombre: "Cambio de correa de distribución", duracionHoras: 4 },
|
|
{ nombre: "Cambio de distribución con bomba de agua", duracionHoras: 8 },
|
|
{ nombre: "Revisión general", duracionHoras: 2 },
|
|
];
|
|
|
|
for (const s of servicios) {
|
|
await prisma.tipoServicio.upsert({
|
|
where: { id: s.nombre },
|
|
update: {},
|
|
create: s,
|
|
}).catch(() => prisma.tipoServicio.create({ data: s }));
|
|
}
|
|
|
|
console.log("Seed completado");
|
|
}
|
|
|
|
main().finally(() => prisma.$disconnect());
|