Sistema de autenticación y gestión para coaches y clientes fitness.
- Node.js: v18 o superior
- npm o yarn
- Docker y Docker Compose: Para la base de datos PostgreSQL
- Expo CLI: Para desarrollo mobile (se instalará automáticamente)
LightWeight/
├── src/
│ ├── backend/ # API NestJS
│ └── frontend/
│ ├── web/ # Dashboard React + Vite
│ └── mobile/ # App React Native + Expo
├── docker-compose.yml # PostgreSQL database
└── README.md
git clone <repository-url>
cd LightWeight# Desde la raíz del proyecto
docker-compose up -dEste comando:
- Descarga la imagen de PostgreSQL 17
- Crea un contenedor llamado
lightweight_postgres - Expone el puerto 5432
- Crea la base de datos
lightweight_dbcon credenciales:- Usuario:
lightweight_user - Contraseña:
lightweight_password
- Usuario:
docker psDeberías ver el contenedor lightweight_postgres en estado Up.
docker-compose downPara eliminar también los datos:
docker-compose down -v# Navegar a la carpeta del backend
cd src/backend
# Instalar dependencias
npm install
# Crear archivo .env desde el template
cp .env.example .env
# El archivo .env debe contener:
# DATABASE_URL="postgresql://lightweight_user:lightweight_password@localhost:5432/lightweight_db?schema=public"
# JWT_SECRET="your-secret-key-change-in-production"
# PORT=3000
# Generar el cliente Prisma
npm run prisma:generate
# Ejecutar migraciones de base de datos
npm run prisma:migrate
# (Opcional) Abrir Prisma Studio para ver la base de datos
npm run prisma:studionpm run start:devEl backend estará disponible en http://localhost:3000
# Unit tests
npm test
# Tests con cobertura
npm run test:cov
# Tests en modo watch
npm run test:watch# Desde la raíz del proyecto
cd src/frontend/web
# Instalar dependencias
npm install
# Iniciar servidor de desarrollo
npm run devEl dashboard web estará disponible en http://localhost:5173
npm run build
npm run preview # Preview del build# Desde la raíz del proyecto
cd src/frontend/mobile
# Instalar dependencias
npm install
# Iniciar Expo
npm startDespués de ejecutar npm start, se abrirá Expo Dev Tools en tu navegador. Desde ahí puedes:
- iOS Simulator: Presiona
i(requiere macOS con Xcode) - Android Emulator: Presiona
a(requiere Android Studio) - Dispositivo Físico:
- Instala Expo Go en tu dispositivo
- Escanea el QR code que aparece en la terminal
Si usas un dispositivo físico, necesitas actualizar la URL del API:
// src/frontend/mobile/src/services/api.ts
// Cambia localhost por la IP de tu computadora
const API_URL = 'http://192.168.1.X:3000'; // Reemplaza X con tu IP localPara encontrar tu IP:
- Windows:
ipconfigen PowerShell - macOS/Linux:
ifconfigen terminal
# Terminal 1: Base de datos
docker-compose up
# Terminal 2: Backend
cd src/backend
npm run start:dev
# Terminal 3: Frontend Web
cd src/frontend/web
npm run dev
# Terminal 4: App Mobile
cd src/frontend/mobile
npm start- Abre
http://localhost:5173en tu navegador - Haz clic en "Create Account"
- Ingresa:
- Username:
coach1 - Password:
Test1234! - Role:
COACH(seleccionado por defecto)
- Username:
- Haz clic en "Sign Up"
- Ingresa credenciales del coach
- Deberías ser redirigido al dashboard
- Verás mensaje de bienvenida
- En la app mobile, navega a la pantalla de registro
- Ingresa:
- Username:
client1 - Password:
Test1234! - Role:
CLIENT
- Username:
- Registra el usuario
- Ingresa credenciales del cliente
- Deberías ser redirigido a la pantalla principal
- Verás mensaje de bienvenida
Intenta loguearte con credenciales de coach en la app mobile:
- ✅ Debería rechazar el login con error: "Role COACH not allowed on mobile channel"
Intenta loguearte con credenciales de cliente en el web:
- ✅ Debería rechazar el login con error: "Role CLIENT not allowed on web channel"
POST /auth/register
Body: { username, password, role }
Response: { message, user: { id, username, role } }
POST /auth/login
Headers: { x-channel: 'web' | 'mobile' }
Body: { username, password }
Response: { access_token, user: { id, username, role } }
# Desde src/backend
npm run prisma:studioEsto abrirá Prisma Studio en http://localhost:5555 donde puedes ver:
- Tabla
Usercon todos los usuarios registrados - Campos: id, username, passwordHash, role, createdAt
# Verificar que PostgreSQL está corriendo
docker ps
# Ver logs de PostgreSQL
docker logs lightweight_postgres
# Reiniciar contenedor
docker-compose restart# Windows - Encontrar proceso usando puerto 3000
netstat -ano | findstr :3000
# Matar proceso (reemplaza PID)
taskkill /PID <PID> /Fcd src/backend
rm -rf node_modules
npm install
npm run prisma:generatecd src/frontend/mobile
npx expo start --clear- Verifica que el backend está corriendo en puerto 3000
- Si usas dispositivo físico, actualiza
API_URLcon tu IP local - Asegúrate de que el dispositivo está en la misma red WiFi
- NestJS - Framework Node.js
- Prisma - ORM para PostgreSQL
- JWT - Autenticación
- bcrypt - Hash de contraseñas
- Jest - Testing
- React 19 - UI library
- Vite - Build tool
- TypeScript - Type safety
- React Router - Routing
- Axios - HTTP client
- React Hot Toast - Notifications
- Tailwind CSS v4 - Styling
- React Native - Mobile framework
- Expo - Development platform
- TypeScript - Type safety
- React Navigation - Navigation
- Axios - HTTP client
- AsyncStorage - Persistent storage
- PostgreSQL 17 - Relational database
- Las contraseñas se hashean con bcrypt (10 salt rounds)
- JWT con expiración de 24 horas
- Variables sensibles en archivo .env (no commitear)
- Validación de roles en cada request
- Headers para identificar canal (web/mobile)
npm run start:dev # Desarrollo con hot-reload
npm run build # Build para producción
npm run start:prod # Ejecutar build de producción
npm test # Ejecutar tests
npm run test:cov # Tests con cobertura
npm run lint # Linter
npm run format # Prettiernpm run dev # Desarrollo
npm run build # Build para producción
npm run preview # Preview del build
npm run lint # Linternpm start # Iniciar Expo
npm run android # Ejecutar en Android
npm run ios # Ejecutar en iOS
npm run web # Ejecutar en webProyecto privado - Todos los derechos reservados