Implementación seeder para iniciar sistema

This commit is contained in:
2026-07-10 20:23:25 +00:00
parent ed6f4e3441
commit 701f8a53f2

View File

@ -0,0 +1,646 @@
import mongoose from "mongoose";
import bcrypt from "bcrypt";
import dotenv from "dotenv";
import roleModel from "../roles/role.model";
import userModel from "../user/user.model";
import permissionModel from "../permissions/permission.model";
import rolePermissionModel from "../role-permissions/rolePermission.model";
async function seedDatabase() {
try {
console.log("=================================");
console.log("Iniciando Seeder...");
console.log("=================================");
await mongoose.connect(
process.env.MONGO_URI as string
);
console.log("MongoDB conectado.");
const roleExists = await roleModel.findOne({
roleName: "ADMINISTRADOR"
});
if (roleExists) {
console.log("El sistema ya fue inicializado.");
await mongoose.disconnect();
return;
}
const adminRole = await roleModel.create({
roleName: "ADMINISTRADOR",
description: "Administrador del sistema",
active: true
});
// Encriptar contraseña
const passwordHash = await bcrypt.hash(
"Admin123",
10
);
// Crear usuario administrador
const adminUser = await userModel.create({
employeeId: 1,
userName: "admin",
passwordHash,
roleId: adminRole._id,
active: true
});
console.log("Usuario Administrador creado.");
console.log("Rol Administrador creado.");
const permissions = [
// AUTH
{
name: "Iniciar Sesión",
module: "auth",
action: "login",
description: "Permite iniciar sesión"
},
{
name: "Cerrar Sesión",
module: "auth",
action: "logout",
description: "Permite cerrar sesión"
},
{
name: "Cambiar Contraseña",
module: "auth",
action: "change-password",
description: "Permite cambiar contraseña"
},
// USERS
{
name: "Ver Usuarios",
module: "users",
action: "read",
description: "Consultar usuarios"
},
{
name: "Crear Usuarios",
module: "users",
action: "create",
description: "Crear usuarios"
},
{
name: "Actualizar Usuarios",
module: "users",
action: "update",
description: "Actualizar usuarios"
},
{
name: "Eliminar Usuarios",
module: "users",
action: "delete",
description: "Eliminar usuarios"
},
// ROLES
{
name: "Ver Roles",
module: "roles",
action: "read",
description: "Consultar roles"
},
{
name: "Crear Roles",
module: "roles",
action: "create",
description: "Crear roles"
},
{
name: "Actualizar Roles",
module: "roles",
action: "update",
description: "Actualizar roles"
},
{
name: "Eliminar Roles",
module: "roles",
action: "delete",
description: "Eliminar roles"
},
// PERMISSIONS
{
name: "Ver Permisos",
module: "permissions",
action: "read",
description: "Consultar permisos"
},
{
name: "Crear Permisos",
module: "permissions",
action: "create",
description: "Crear permisos"
},
{
name: "Actualizar Permisos",
module: "permissions",
action: "update",
description: "Actualizar permisos"
},
{
name: "Eliminar Permisos",
module: "permissions",
action: "delete",
description: "Eliminar permisos"
},
// ROLE PERMISSIONS
{
name: "Ver Configuración de Permisos",
module: "role-permissions",
action: "read",
description: "Consultar permisos por rol"
},
{
name: "Asignar Permisos",
module: "role-permissions",
action: "create",
description: "Asignar permisos a un rol"
},
{
name: "Actualizar Configuración de Permisos",
module: "role-permissions",
action: "update",
description: "Actualizar permisos de un rol"
},
{
name: "Eliminar Configuración de Permisos",
module: "role-permissions",
action: "delete",
description: "Eliminar configuración de permisos"
},
// FUEL TYPES
{
name: "Ver Tipos de Combustible",
module: "fuel-types",
action: "read",
description: "Consultar tipos de combustible"
},
{
name: "Crear Tipo de Combustible",
module: "fuel-types",
action: "create",
description: "Crear tipo de combustible"
},
{
name: "Actualizar Tipo de Combustible",
module: "fuel-types",
action: "update",
description: "Actualizar tipo de combustible"
},
{
name: "Eliminar Tipo de Combustible",
module: "fuel-types",
action: "delete",
description: "Eliminar tipo de combustible"
},
// FUEL REQUESTS
{
name: "Ver Solicitudes de Combustible",
module: "fuel-requests",
action: "read",
description: "Consultar solicitudes de combustible"
},
{
name: "Crear Solicitud de Combustible",
module: "fuel-requests",
action: "create",
description: "Crear solicitud de combustible"
},
{
name: "Actualizar Solicitud de Combustible",
module: "fuel-requests",
action: "update",
description: "Actualizar solicitud de combustible"
},
{
name: "Eliminar Solicitud de Combustible",
module: "fuel-requests",
action: "delete",
description: "Eliminar solicitud de combustible"
},
// FUEL LOADS
{
name: "Ver Cargas de Combustible",
module: "fuel-loads",
action: "read",
description: "Consultar cargas de combustible"
},
{
name: "Registrar Carga de Combustible",
module: "fuel-loads",
action: "create",
description: "Registrar carga de combustible"
},
{
name: "Actualizar Carga de Combustible",
module: "fuel-loads",
action: "update",
description: "Actualizar carga de combustible"
},
{
name: "Eliminar Carga de Combustible",
module: "fuel-loads",
action: "delete",
description: "Eliminar carga de combustible"
},
// EXTERNAL INVOICES
{
name: "Ver Facturas Externas",
module: "external-invoices",
action: "read",
description: "Consultar facturas externas"
},
{
name: "Crear Factura Externa",
module: "external-invoices",
action: "create",
description: "Registrar factura externa"
},
{
name: "Actualizar Factura Externa",
module: "external-invoices",
action: "update",
description: "Actualizar factura externa"
},
{
name: "Eliminar Factura Externa",
module: "external-invoices",
action: "delete",
description: "Eliminar factura externa"
},
// APPROVALS
{
name: "Ver Aprobaciones",
module: "approvals",
action: "read",
description: "Consultar aprobaciones"
},
{
name: "Aprobar Solicitud",
module: "approvals",
action: "approve",
description: "Aprobar solicitud"
},
{
name: "Rechazar Solicitud",
module: "approvals",
action: "reject",
description: "Rechazar solicitud"
},
{
name: "Eliminar Aprobación",
module: "approvals",
action: "delete",
description: "Eliminar aprobación"
},
// PUMP READINGS
{
name: "Ver Lecturas de Bomba",
module: "pump-readings",
action: "read",
description: "Consultar lecturas de bomba"
},
{
name: "Actualizar Lectura de Bomba",
module: "pump-readings",
action: "update",
description: "Actualizar lectura de bomba"
},
{
name: "Calcular Galones Despachados",
module: "pump-readings",
action: "calculate-dispensed",
description: "Calcular galones despachados"
},
{
name: "Calcular Galones del Sistema",
module: "pump-readings",
action: "calculate-system",
description: "Calcular galones registrados por el sistema"
},
{
name: "Calcular Diferencia",
module: "pump-readings",
action: "calculate-difference",
description: "Calcular diferencia entre sistema y bomba"
},
{
name: "Actualizar Estado de Lectura",
module: "pump-readings",
action: "update-status",
description: "Actualizar estado de la lectura"
},
{
name: "Actualizar Solicitudes Relacionadas",
module: "pump-readings",
action: "update-requests",
description: "Actualizar solicitudes relacionadas"
},
{
name: "Crear Anomalía",
module: "pump-readings",
action: "create-anomaly",
description: "Registrar anomalía por diferencia"
},
{
name: "Cerrar Lectura",
module: "pump-readings",
action: "close",
description: "Cerrar lectura diaria de bomba"
},
// CATALOGS
{
name: "Ver Empleados",
module: "catalogs",
action: "employees-read",
description: "Consultar empleados"
},
{
name: "Ver Vehículos",
module: "catalogs",
action: "vehicles-read",
description: "Consultar vehículos"
},
{
name: "Ver Departamentos",
module: "catalogs",
action: "departments-read",
description: "Consultar departamentos"
},
{
name: "Ver Rutas",
module: "catalogs",
action: "routes-read",
description: "Consultar rutas"
},
// AUDIT LOGS
{
name: "Ver Auditoría",
module: "audit-logs",
action: "read",
description: "Consultar registros de auditoría"
},
{
name: "Crear Auditoría",
module: "audit-logs",
action: "create",
description: "Registrar eventos en auditoría"
},
{
name: "Eliminar Auditoría",
module: "audit-logs",
action: "delete",
description: "Eliminar registros de auditoría"
},
// REPORTS
{
name: "Resumen General",
module: "reports",
action: "summary",
description: "Consultar resumen general"
},
{
name: "Reporte de Combustible por Ruta",
module: "reports",
action: "fuel-route",
description: "Consultar combustible por ruta"
},
{
name: "Reporte de Combustible por Departamento",
module: "reports",
action: "fuel-department",
description: "Consultar combustible por departamento"
},
{
name: "Reporte de Combustible por Vehículo",
module: "reports",
action: "fuel-vehicle",
description: "Consultar combustible por vehículo"
},
{
name: "Reporte de Combustible por Empleado",
module: "reports",
action: "fuel-employee",
description: "Consultar combustible por empleado"
},
{
name: "Reporte de Kilómetros por Ruta",
module: "reports",
action: "distance-route",
description: "Consultar kilómetros por ruta"
},
{
name: "Reporte de Kilómetros por Departamento",
module: "reports",
action: "distance-department",
description: "Consultar kilómetros por departamento"
},
{
name: "Reporte de Kilómetros por Vehículo",
module: "reports",
action: "distance-vehicle",
description: "Consultar kilómetros por vehículo"
},
{
name: "Reporte de Kilómetros por Empleado",
module: "reports",
action: "distance-employee",
description: "Consultar kilómetros por empleado"
},
{
name: "Reporte de Rendimiento",
module: "reports",
action: "vehicle-performance",
description: "Consultar rendimiento por vehículo"
},
{
name: "Historial de Vehículo",
module: "reports",
action: "vehicle-history",
description: "Consultar historial de vehículo"
},
{
name: "Historial de Empleado",
module: "reports",
action: "employee-history",
description: "Consultar historial de empleado"
},
{
name: "Empleado por Vehículo",
module: "reports",
action: "employee-by-vehicle",
description: "Consultar empleado asignado al vehículo"
},
{
name: "Vehículos por Empleado",
module: "reports",
action: "vehicles-by-employee",
description: "Consultar vehículos asignados al empleado"
},
{
name: "Reporte de Anomalías",
module: "reports",
action: "anomalies",
description: "Consultar anomalías"
},
{
name: "Reporte de Facturas por Zona",
module: "reports",
action: "invoice-zones",
description: "Consultar facturas por zona"
},
{
name: "Ranking de Gastos por Ruta",
module: "reports",
action: "route-expense-ranking",
description: "Consultar ranking de gastos por ruta"
},
{
name: "Gasto por Ruta",
module: "reports",
action: "expense-route",
description: "Consultar gasto por ruta"
},
{
name: "Gasto por Departamento",
module: "reports",
action: "expense-department",
description: "Consultar gasto por departamento"
},
{
name: "Gasto por Vehículo",
module: "reports",
action: "expense-vehicle",
description: "Consultar gasto por vehículo"
},
{
name: "Ranking de Consumo de Vehículos",
module: "reports",
action: "vehicle-consumption-ranking",
description: "Consultar ranking de consumo"
},
{
name: "Dashboard",
module: "reports",
action: "dashboard",
description: "Consultar dashboard"
}
];
const permissionsToInsert = permissions.map((permission: any) => ({
...permission,
active: true,
createdBy: adminUser._id
}));
const createdPermissions = await permissionModel.insertMany(
permissionsToInsert
);
console.log(`${createdPermissions.length} permisos creados.`);
await rolePermissionModel.create({
roleId: adminRole._id,
permissions: createdPermissions.map(
permission => permission._id
),
active: true,
createdBy: adminUser._id
});
console.log("Permisos asignados al rol Administrador.");
await mongoose.disconnect();
console.log("Seeder ejecutado correctamente.");
} catch (error) {
console.error(error);
await mongoose.disconnect();
}
}
seedDatabase();