Skip to content

facusantillo/lightweight

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LightWeight Platform

Sistema de autenticación y gestión para coaches y clientes fitness.

📋 Requisitos Previos

  • 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)

🏗️ Arquitectura del Proyecto

LightWeight/
├── src/
│   ├── backend/          # API NestJS
│   └── frontend/
│       ├── web/          # Dashboard React + Vite
│       └── mobile/       # App React Native + Expo
├── docker-compose.yml    # PostgreSQL database
└── README.md

🚀 Configuración Inicial

1. Clonar el Repositorio

git clone <repository-url>
cd LightWeight

2. Configurar Base de Datos PostgreSQL

Iniciar PostgreSQL con Docker Compose

# Desde la raíz del proyecto
docker-compose up -d

Este comando:

  • Descarga la imagen de PostgreSQL 17
  • Crea un contenedor llamado lightweight_postgres
  • Expone el puerto 5432
  • Crea la base de datos lightweight_db con credenciales:
    • Usuario: lightweight_user
    • Contraseña: lightweight_password

Verificar que PostgreSQL está corriendo

docker ps

Deberías ver el contenedor lightweight_postgres en estado Up.

Detener PostgreSQL (cuando necesites)

docker-compose down

Para eliminar también los datos:

docker-compose down -v

3. Configurar Backend (NestJS)

# 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:studio

Iniciar el Backend en Desarrollo

npm run start:dev

El backend estará disponible en http://localhost:3000

Ejecutar Tests del Backend

# Unit tests
npm test

# Tests con cobertura
npm run test:cov

# Tests en modo watch
npm run test:watch

4. Configurar Frontend Web (React + Vite)

# Desde la raíz del proyecto
cd src/frontend/web

# Instalar dependencias
npm install

# Iniciar servidor de desarrollo
npm run dev

El dashboard web estará disponible en http://localhost:5173

Build para Producción (Web)

npm run build
npm run preview  # Preview del build

5. Configurar App Mobile (React Native + Expo)

# Desde la raíz del proyecto
cd src/frontend/mobile

# Instalar dependencias
npm install

# Iniciar Expo
npm start

Ejecutar en Simulador/Dispositivo

Despué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:
    1. Instala Expo Go en tu dispositivo
    2. Escanea el QR code que aparece en la terminal

⚠️ Importante para Dispositivos Físicos

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 local

Para encontrar tu IP:

  • Windows: ipconfig en PowerShell
  • macOS/Linux: ifconfig en terminal

🧪 Probar el Sistema Localmente

Flujo Completo de Prueba

1. Asegurar que todos los servicios están corriendo

# 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

2. Registrar un Coach (Web)

  1. Abre http://localhost:5173 en tu navegador
  2. Haz clic en "Create Account"
  3. Ingresa:
    • Username: coach1
    • Password: Test1234!
    • Role: COACH (seleccionado por defecto)
  4. Haz clic en "Sign Up"

3. Login como Coach (Web)

  1. Ingresa credenciales del coach
  2. Deberías ser redirigido al dashboard
  3. Verás mensaje de bienvenida

4. Registrar un Cliente (Mobile)

  1. En la app mobile, navega a la pantalla de registro
  2. Ingresa:
    • Username: client1
    • Password: Test1234!
    • Role: CLIENT
  3. Registra el usuario

5. Login como Cliente (Mobile)

  1. Ingresa credenciales del cliente
  2. Deberías ser redirigido a la pantalla principal
  3. Verás mensaje de bienvenida

6. Verificar Restricciones de Canal

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"

Endpoints Disponibles

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 } }

Verificar Base de Datos

# Desde src/backend
npm run prisma:studio

Esto abrirá Prisma Studio en http://localhost:5555 donde puedes ver:

  • Tabla User con todos los usuarios registrados
  • Campos: id, username, passwordHash, role, createdAt

🔧 Troubleshooting

Error: "Database connection failed"

# Verificar que PostgreSQL está corriendo
docker ps

# Ver logs de PostgreSQL
docker logs lightweight_postgres

# Reiniciar contenedor
docker-compose restart

Error: "Port 3000 already in use"

# Windows - Encontrar proceso usando puerto 3000
netstat -ano | findstr :3000

# Matar proceso (reemplaza PID)
taskkill /PID <PID> /F

Error: "Cannot find module" en Backend

cd src/backend
rm -rf node_modules
npm install
npm run prisma:generate

Error: Metro bundler issues (Mobile)

cd src/frontend/mobile
npx expo start --clear

Error: "Cannot connect to backend" en Mobile

  1. Verifica que el backend está corriendo en puerto 3000
  2. Si usas dispositivo físico, actualiza API_URL con tu IP local
  3. Asegúrate de que el dispositivo está en la misma red WiFi

📚 Stack Tecnológico

Backend

  • NestJS - Framework Node.js
  • Prisma - ORM para PostgreSQL
  • JWT - Autenticación
  • bcrypt - Hash de contraseñas
  • Jest - Testing

Frontend Web

  • React 19 - UI library
  • Vite - Build tool
  • TypeScript - Type safety
  • React Router - Routing
  • Axios - HTTP client
  • React Hot Toast - Notifications
  • Tailwind CSS v4 - Styling

Frontend Mobile

  • React Native - Mobile framework
  • Expo - Development platform
  • TypeScript - Type safety
  • React Navigation - Navigation
  • Axios - HTTP client
  • AsyncStorage - Persistent storage

Database

  • PostgreSQL 17 - Relational database

🔐 Seguridad

  • 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)

📝 Scripts Útiles

Backend

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         # Prettier

Frontend Web

npm run dev            # Desarrollo
npm run build          # Build para producción
npm run preview        # Preview del build
npm run lint           # Linter

Frontend Mobile

npm start              # Iniciar Expo
npm run android        # Ejecutar en Android
npm run ios            # Ejecutar en iOS
npm run web            # Ejecutar en web

📄 Licencia

Proyecto privado - Todos los derechos reservados

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors