# Gym Backend - Node.js Version This is a Node.js backend for a Gym application that was converted from a Java/Quarkus application. It uses Express.js and Sequelize with PostgreSQL. ## Características - Gestión de usuarios - Gestión de clases de gimnasio - Sistema de reservas - Subida de archivos (imágenes) ## Tecnologías - Node.js & Express - PostgreSQL con Sequelize - Autenticación con bcrypt - Multer para subida de archivos ## Instalación ```bash # Instalar dependencias npm install # Configurar variables de entorno # Edita el archivo .env con tus credenciales de PostgreSQL ``` ## Configuración de la Base de Datos Puedes usar PostgreSQL local o en Railway. Asegúrate de actualizar las variables de entorno en el archivo .env: ``` PORT=3000 DB_HOST=localhost DB_USER=postgres DB_PASSWORD=postgres DB_NAME=gymdb DB_PORT=5432 DB_DIALECT=postgres NODE_ENV=development ``` ## Ejecución de la Aplicación ```bash # Ejecutar en modo desarrollo npm run dev # Ejecutar en modo producción npm start # Poblar la base de datos con datos de ejemplo npm run seed ``` ## Endpoints de la API ### Usuarios - `GET /api/users` - Obtener todos los usuarios - `GET /api/users/:id` - Obtener usuario por ID - `POST /api/users` - Crear nuevo usuario - `PUT /api/users/:id` - Actualizar usuario ### Clases de Gimnasio - `GET /api/classes` - Obtener todas las clases - `GET /api/classes/:id` - Obtener clase por ID - `POST /api/classes` - Crear nueva clase - `PUT /api/classes/:id` - Actualizar clase - `DELETE /api/classes/:id` - Eliminar clase ### Reservas - `GET /api/bookings` - Obtener todas las reservas - `GET /api/bookings/user/:userId` - Obtener reservas por usuario - `POST /api/bookings` - Crear nueva reserva - `PUT /api/bookings/:id/cancel` - Cancelar reserva ### Subida de Archivos - `POST /api/upload` - Subir un archivo ## Despliegue en Railway 1. Crea una cuenta en [Railway](https://railway.app/) si aún no tienes una 2. Crea un nuevo proyecto en Railway 3. Agrega un servicio de PostgreSQL desde el dashboard 4. Conecta tu repositorio de GitHub o sube el código directamente 5. Configura las variables de entorno en Railway: ``` PORT=3000 DB_HOST=${{ PGHOST }} DB_USER=${{ PGUSER }} DB_PASSWORD=${{ PGPASSWORD }} DB_NAME=${{ PGDATABASE }} DB_PORT=${{ PGPORT }} DB_DIALECT=postgres NODE_ENV=production ``` 6. Railway detectará automáticamente que es una aplicación Node.js y ejecutará `npm start` 7. Una vez desplegada, ejecuta el comando de inicialización de datos desde la terminal de Railway: ``` npm run seed ``` ## Comparación con la Versión Java/Quarkus Esta versión Node.js mantiene la misma funcionalidad y estructura de API que la versión original Java/Quarkus, con estas diferencias clave: 1. Usa Sequelize como ORM en lugar de Hibernate/Panache 2. Implementa API RESTful con Express en lugar de JAX-RS 3. Maneja la subida de archivos con Multer en lugar de RESTEasy Multipart 4. Mantiene compatibilidad con PostgreSQL al igual que la versión original ## Licencia MIT