Sistema completo de gestión de usuarios y roles desarrollado con Node.js, Express, PostgreSQL y Sequelize ORM. Implementa relaciones complejas de base de datos y transacciones atómicas.
Este proyecto fue desarrollado como parte del módulo de Aplicaciones Node del Bootcamp de JavaScript. El objetivo era crear una aplicación web completa para gestionar usuarios y roles, implementando operaciones CRUD utilizando un ORM (Sequelize) y manejando relaciones entre entidades a través de asociaciones uno a uno, uno a muchos y muchos a muchos.
Explora la arquitectura y estructura de la base de datos del sistema a través de estos diagramas interactivos:
El sistema implementa los tres tipos principales de relaciones de base de datos:
UserRoles que almacena las relaciones.
El sistema utiliza transacciones para garantizar que las operaciones complejas se ejecuten de manera atómica:
sequelize.transaction() crea un contexto transaccionalEsta sección explica los conceptos técnicos fundamentales implementados en el proyecto:
Sequelize es un ORM que permite trabajar con bases de datos usando objetos JavaScript en lugar de SQL directo.
bcryptjs implementa el algoritmo bcrypt para hashear contraseñas de forma segura.
Joi es una librería de validación que permite definir esquemas para validar datos de entrada.
El proyecto implementa los tres tipos principales de relaciones entre entidades.
app-gestor-usuario/
├── config/
│ ├── config.js # Configuración de Sequelize CLI
│ ├── config.json # Configuración de base de datos
│ └── database.js # Conexión a la base de datos
├── controllers/
│ ├── RolController.js # Lógica de negocio para roles
│ └── UsuarioController.js # Lógica de negocio para usuarios
├── middleware/
│ ├── errorHandler.js # Manejo centralizado de errores
│ └── validations.js # Validación de requests
├── migrations/ # Migraciones de base de datos
├── models/
│ ├── index.js # Configuración de modelos y asociaciones
│ ├── Rol.js # Modelo de roles
│ ├── Usuario.js # Modelo de usuarios
│ ├── UserProfile.js # Modelo de perfiles (relación 1:1)
│ └── UserRoles.js # Tabla pivote (relación N:M)
├── public/ # Frontend estático
│ ├── assets/
│ │ ├── css/
│ │ │ └── styles.css # Estilos personalizados
│ │ └── js/
│ │ ├── api.js # Funciones para llamadas API
│ │ ├── config.js # Configuración del frontend
│ │ ├── ui.js # Utilidades de interfaz
│ │ ├── validators.js # Validaciones del cliente
│ │ ├── users.js # Lógica de gestión de usuarios
│ │ ├── user-detail.js # Detalle de usuario
│ │ ├── roles.js # Lógica de gestión de roles
│ │ └── components/
│ │ └── templates.js # Plantillas HTML
│ ├── index.html # Dashboard principal
│ ├── users.html # Lista de usuarios
│ ├── user-detail.html # Detalle de usuario
│ └── roles.html # Gestión de roles
├── routes/
│ └── api.js # Rutas de la API
├── schemas/
│ ├── roles.schema.js # Esquemas de validación para roles
│ └── users.schema.js # Esquemas de validación para usuarios
├── seeders/ # Datos de ejemplo
├── services/
│ └── TransaccionService.js # Servicios transaccionales
├── utils/
│ └── hash.js # Utilidades para hash de contraseñas
├── app.js # Archivo principal del servidor
├── package.json # Dependencias y scripts
└── README.md # Documentación completa
Explora las diferentes funcionalidades del sistema a través de estas capturas de pantalla:
Dashboard principal con estadísticas del sistema, total de usuarios, roles y fecha del último usuario creado.
Gestión de usuarios con búsqueda, filtros, paginación y acciones CRUD completas.
Formulario completo para crear/editar usuarios con perfil extendido y asignación de roles múltiples.
Interfaz para administrar roles del sistema con descripciones y estado activo/inactivo.
POST /api/users: Crea un nuevo usuario con validación completa y transacciones
GET /api/users: Lista usuarios con paginación y filtros opcionales
GET /api/users/:id: Obtiene un usuario específico con sus relaciones
PUT /api/users/:id: Actualiza usuario, perfil y roles de forma atómica
DELETE /api/users/:id: Elimina usuario y limpia todas las relaciones
POST /api/roles: Crea nuevos roles con validación de nombres únicos
GET /api/roles: Lista todos los roles disponibles en el sistema
GET /api/roles/:id: Obtiene un rol específico con usuarios asignados
PUT /api/roles/:id: Actualiza información del rol (nombre, descripción)
DELETE /api/roles/:id: Elimina rol y limpia asignaciones de usuarios
GET /api/health: Endpoint de monitoreo que verifica el estado del servidor y la conexión a la base de datos.
Propósito: Permite a sistemas externos (load balancers, monitoreo) verificar si la aplicación está funcionando correctamente.
Respuesta: Retorna información sobre el estado del servidor, versión de la aplicación y estado de la base de datos.