Omega-API-REST es el backend para la página web de una relojería y joyería. Implementa una arquitectura Modelo-Vista-Controlador (MVC) organizada en Controllers, Models, y Routes, junto con middleware para diversas funcionalidades como:
- Manejo de autenticación con JWT.
- Creación dinámica de carpetas para almacenar archivos.
- Verificación de roles de usuario.
- Envío de correos electrónicos para notificaciones y restablecimiento de contraseñas.
- Autenticación Segura: Uso de JSON Web Tokens (JWT) para autenticar usuarios y proteger rutas.
- 🔐 Autenticación con Google OAuth 🆕:
- Login y registro con cuentas de Google
- Vinculación de cuentas existentes con Google
- Desvinculación segura de cuentas Google
- Sistema híbrido: tradicional + OAuth
- Gestión de Usuarios:
- Registro, inicio de sesión y actualización de perfiles.
- Carga de imágenes de perfil con recorte y almacenamiento en el servidor.
- Eliminación de cuentas de usuario con confirmación.
- Sistema de Reservas en Tiempo Real 🆕:
- Reserva temporal de productos (30 minutos por defecto)
- Manejo automático de stock en tiempo real
- Expiración automática de reservas
- Prevención de reservas duplicadas
- Limpieza automática con jobs programados
- Roles y Permisos: Control de acceso basado en roles, como administrador o usuario.
- Notificaciones por Correo: Envío de correos electrónicos para restablecimiento de contraseñas y confirmaciones.
- Almacenamiento de Archivos: Uso de
multerpara subir y procesar imágenes. - Auditoría Completa: Registro de todas las acciones del sistema.
Asegúrate de tener instalado:
- Node.js (v14 o superior)
- PostgreSQL (v13 o superior)
- Copia de Base de Datos Omega
-
Clonar el repositorio:
git clone https://github.com/tuusuario/Omega-API-REST.git cd Omega-API-REST -
Instalar dependencias:
npm install
-
Configurar variables de entorno:
Crea un archivo.enven la raíz del proyecto con las siguientes variables:PORT=4000 DB_HOST=localhost DB_PORT=5432 DB_USER=tu_usuario DB_PASSWORD=tu_contraseña DB_NAME=omega_db JWT_SECRET=tu_secreto_jwt EMAIL_USER=tu_correo@gmail.com EMAIL_PASSWORD=tu_contraseña_correo -
Configurar Base de Datos:
# Crear tabla de reservas node scripts/crear_tabla_reservas.js -
Iniciar Servidor:
npm start
Omega-API-REST/
├── controllers/ # Lógica principal de cada funcionalidad
├── middleware/ # Funciones intermedias para validaciones y manejo de solicitudes
├── models/ # Conexión y consultas a la base de datos
├── routes/ # Definición de rutas para la API
├── uploads/ # Almacenamiento de archivos subidos
├── utils/ # Funciones auxiliares (ej. generación de códigos)
├── db/ # Scripts para la base de datos
├── .env.example # Ejemplo de configuración de entorno
└── server.js # Punto de entrada del servidor
- Express: Framework para manejar rutas y solicitudes HTTP.
- Multer: Middleware para manejar subida de archivos.
- Bcrypt.js: Cifrado de contraseñas.
- jsonwebtoken: Generación y verificación de JWT.
- Nodemailer: Envío de correos electrónicos.
- pg: Cliente de PostgreSQL para Node.js.
- node-cron: Programación de tareas automáticas.
- sequelize: ORM para manejo de base de datos.
- google-auth-library: Verificación de tokens de Google OAuth 🆕.
El sistema ahora soporta autenticación con Google OAuth además del método tradicional.
-
Variables de entorno:
GOOGLE_CLIENT_ID=tu_google_client_id GOOGLE_CLIENT_SECRET=tu_google_client_secret
-
Configurar base de datos:
node scripts/configurar_google_oauth.js
POST /usuarios/auth/google- Login/Registro con GoogleDELETE /usuarios/auth/google/unlink- Desvincular cuenta Google
📚 Ver GOOGLE_OAUTH_README.md para documentación detallada.
| Método | Endpoint | Descripción | Autenticación |
|---|---|---|---|
GET |
/productos/:id/stock |
Obtener stock en tiempo real | No |
POST |
/productos/:id/reservar |
Reservar producto | Sí |
PUT |
/productos/reserva/:id/confirmar |
Confirmar reserva | Sí |
DELETE |
/productos/reserva/:id/cancelar |
Cancelar reserva | Sí |
GET |
/productos/mis-reservas |
Ver mis reservas | Sí |
- ⏰ Reservas Temporales: 30 minutos de duración (configurable)
- 🔄 Stock en Tiempo Real: Actualización inmediata del inventario
- 🧹 Limpieza Automática: Job que limpia reservas expiradas cada 5 minutos
- 🛡️ Validaciones: Prevención de reservas duplicadas y validación de stock
- 📊 Monitoreo: Estadísticas y logs automáticos del sistema
- 🔐 Seguridad: Todas las operaciones requieren autenticación
// Obtener stock actual
GET /productos/1/stock
Respuesta: {
"producto_id": 1,
"nombre_producto": "Reloj Omega",
"stock_disponible": 15,
"precio_producto": 299.99,
"disponible": true
}
// Reservar producto
POST /productos/1/reservar
Headers: { "Authorization": "Bearer <token>" }
Body: { "cantidad": 2 }
Respuesta: {
"message": "Producto reservado exitosamente",
"reserva": {
"reserva_id": 123,
"cantidad_reservada": 2,
"fecha_expiracion": "2025-06-27T15:30:00.000Z"
}
}# Ejecutar pruebas automáticas
node test_reservas.js
# Ver ejemplo de frontend
# Abrir: frontend-ejemplo/reservas-ejemplo.html| Script | Comando | Descripción |
|---|---|---|
| Iniciar servidor | npm start |
Inicia el servidor en producción |
| Desarrollo | npm run dev |
Inicia con nodemon (auto-restart) |
| Limpiar e iniciar | .\start-server.bat |
Limpia procesos y inicia servidor |
| Crear tabla reservas | node scripts/crear_tabla_reservas.js |
Configura la BD de reservas |
| Probar reservas | node test_reservas.js |
Ejecuta pruebas del sistema |