/** * Siembra las tablas ConfiguracionSistema y RolConfiguracion con valores * iniciales. Idempotente: upsert por clave/rol. * * Lee config/acciones.ts (catálogo de acciones) y config/roles.ts (matriz de * módulos) como fuente de verdad. * * Uso: npx tsx scripts/seed-config.js */ import path from 'node:path' import { fileURLToPath } from 'node:url' import dotenv from 'dotenv' import { PrismaClient } from '@prisma/client' import { ACCIONES_POR_ROL_DEFAULT } from '../src/config/acciones.ts' import { MODULOS } from '../src/config/roles.ts' const raizApi = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..') dotenv.config({ path: [path.resolve(raizApi, '.env'), path.resolve(raizApi, '..', '.env')] }) const prisma = new PrismaClient() // ── ConfiguracionSistema ─────────────────────────────────────────────── const CONFIGS_DEFAULT = [ { clave: 'modo_local_forzado', valor: 'false' }, { clave: 'recordatorio_inactividad_dias', valor: '10' }, { clave: 'recordatorio_cobranza_hora', valor: '09:30' }, { clave: 'sesion_minutos', valor: '480' }, { clave: 'auto_logout', valor: 'true' }, { clave: 'mostrar_precios_lista', valor: 'true' }, { clave: 'max_upload_mb', valor: '10' }, ] // ── RolConfiguracion: módulos por rol (matriz de config/roles.ts) ────── const MODULOS_VENDEDOR = [ 'mi-dia', 'alta-cliente', 'alta-afluencia', 'cotizador', 'mi-tablero', 'contactos', 'chat', ] const MATRIZ_MODULOS = { vendedor: MODULOS_VENDEDOR, administracion_venta: [...MODULOS_VENDEDOR, 'cobranza'], director_ventas: [...MODULOS_VENDEDOR, 'cobranza', 'tablero-comercial'], escrituracion: [...MODULOS_VENDEDOR, 'cobranza'], direccion_general: ['mi-dia', 'tablero-comercial', 'cobranza', 'chat'], admin: [...MODULOS], } async function main() { console.log('⚙️ Sembrando ConfiguracionSistema...') for (const { clave, valor } of CONFIGS_DEFAULT) { await prisma.configuracionSistema.upsert({ where: { clave }, create: { clave, valor }, update: { valor }, }) console.log(` ✓ ${clave} = ${valor}`) } console.log('\n⚙️ Sembrando RolConfiguracion...') for (const [rol, modulos] of Object.entries(MATRIZ_MODULOS)) { const acciones = ACCIONES_POR_ROL_DEFAULT[rol] ?? ACCIONES_POR_ROL_DEFAULT.vendedor await prisma.rolConfiguracion.upsert({ where: { rol }, create: { rol, modulos: JSON.stringify(modulos), acciones: JSON.stringify(acciones), }, update: { modulos: JSON.stringify(modulos), acciones: JSON.stringify(acciones), }, }) console.log(` ✓ ${rol}: ${modulos.length} módulos, acciones: ${Object.keys(acciones).length}`) } console.log('\n✅ Seed de configuración completado.') } main() .catch((err) => { console.error('❌ Error en seed:', err) process.exit(1) }) .finally(() => prisma.$disconnect())