diff --git a/backend/src/modules/seeders/initialData.seed.ts b/backend/src/modules/seeders/initialData.seed.ts new file mode 100644 index 0000000..4395f01 --- /dev/null +++ b/backend/src/modules/seeders/initialData.seed.ts @@ -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(); \ No newline at end of file