# 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