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 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())