Datos o scripts iniciales que se usan para poblar una base de datos o generar resultados reproducibles
El seeding es el proceso de poblar una base de datos con datos iniciales o de prueba. Es esencial para: - Desarrollo: Tener datos de ejemplo para trabajar - Testing: Crear escenarios reproducibles - Producción: Insertar datos iniciales (roles, configuraciones, catálogos) - Demos: Mostrar la aplicación con datos realistas Los seeds deben ser idempotentes (ejecutables múltiples veces sin duplicar datos) y deterministas (producir los mismos resultados).
// prisma/seed.ts import { PrismaClient } from '@prisma/client'; import { faker } from '@faker-js/faker'; const prisma = new PrismaClient(); async function main() { // Seed de datos base (idempotente con upsert) const adminRole = await prisma.role.upsert({ where: { name: 'ADMIN' }, update: {}, create: { name: 'ADMIN', permissions: ['*'] } }); // Seed de usuario admin await prisma.user.upsert({ where: { email: 'admin@example.com' }, update: {}, create: { email: 'admin@example.com', name: 'Admin', password: await hash('admin123'), roleId: adminRole.id } }); // Seed de datos de prueba con Faker const users = Array.from({ length: 10 }, () => ({ email: faker.internet.email(), name: faker.person.fullName(), avatar: faker.image.avatar() })); await prisma.user.createMany({ data: users, skipDuplicates: true }); console.log('✅ Seed completado'); } main() .catch(console.error) .finally(() => prisma.$disconnect()); // Ejecutar: npx prisma db seed