Files
FRASA-CAS/api-gateway/scripts/seed-config.js
Consult AS Technology 64b01246d6 feat(mejoras): 25 mejoras UX en todos los módulos + purga Monday
Backend: mi-dia siempre local, vocabulario canónico, AplicacionPago con usuario
Mi día: modal español real, cita desde modal, score falso eliminado
Cotizador: barra sticky, persistencia local con folio
Alta Clientes: redirect eliminado, foto conectada, asesor desde sesión, refs dinámicas
Cobranza: contrato Mora arreglado, link a Plan, abono próximo pago, WhatsApp
Landing: contactos locales, ModalContacto eliminado, ModoTrabajo eliminado
Dashboards: MiTablero unificado, funnel con descartados, drill-down, rango fechas
Chat FRASA: corpus 5 desarrollos, 6 herramientas, historial conversaciones

69 archivos, 7 apps construidas
2026-09-11 06:52:37 +00:00

75 lines
2.6 KiB
JavaScript
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* 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 { MATRIZ, 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' },
{ clave: 'round_robin_habilitado', valor: 'false' },
]
// ── RolConfiguracion: módulos por rol (la MATRIZ de config/roles.ts es la
// fuente de verdad; aquí solo se persiste para que /auth/me la lea de DB) ──
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)) {
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())