- Tablas ConfiguracionSistema (7 configs) + RolConfiguracion (6 roles) - Endpoints: config/sistema GET/PATCH, config/roles GET/PATCH, config/usuarios GET/PATCH, config/reset-roles POST, config/acciones GET - modulosDeRol() async con fallback a MATRIZ estatica - auth/me devuelve acciones[] segun rol del usuario - saludMonday.estaDisponible() lee modo_local_forzado de DB (cache 30s) - Landing: vista Configuraciones con 4 tabs (Modo, Roles, Usuarios, Sistema) - Mi-dia: boton Descartar se deshabilita si !descartar_lead - 630 API tests + 24 landing tests + 20 mi-dia tests verdes Seed: npm run seed:config
85 lines
2.9 KiB
JavaScript
85 lines
2.9 KiB
JavaScript
/**
|
||
* 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())
|