FASE 7 COMPLETADA: Testing y Lanzamiento - PROYECTO FINALIZADO
Some checks failed
CI/CD Pipeline / 🧪 Tests (push) Has been cancelled
CI/CD Pipeline / 🏗️ Build (push) Has been cancelled
CI/CD Pipeline / 🚀 Deploy to Staging (push) Has been cancelled
CI/CD Pipeline / 🚀 Deploy to Production (push) Has been cancelled
CI/CD Pipeline / 🏷️ Create Release (push) Has been cancelled
CI/CD Pipeline / 🧹 Cleanup (push) Has been cancelled

Implementados 4 módulos con agent swarm:

1. TESTING FUNCIONAL (Jest)
   - Configuración Jest + ts-jest
   - Tests unitarios: auth, booking, court (55 tests)
   - Tests integración: routes (56 tests)
   - Factories y utilidades de testing
   - Coverage configurado (70% servicios)
   - Scripts: test, test:watch, test:coverage

2. TESTING DE USUARIO (Beta)
   - Sistema de beta testers
   - Feedback con categorías y severidad
   - Beta issues tracking
   - 8 testers de prueba creados
   - API completa para gestión de feedback

3. DOCUMENTACIÓN COMPLETA
   - API.md - 150+ endpoints documentados
   - SETUP.md - Guía de instalación
   - DEPLOY.md - Deploy en VPS
   - ARCHITECTURE.md - Arquitectura del sistema
   - APP_STORE.md - Material para stores
   - Postman Collection completa
   - PM2 ecosystem config
   - Nginx config con SSL

4. GO LIVE Y PRODUCCIÓN
   - Sistema de monitoreo (logs, health checks)
   - Servicio de alertas multi-canal
   - Pre-deploy check script
   - Docker + docker-compose producción
   - Backup automatizado
   - CI/CD GitHub Actions
   - Launch checklist completo

ESTADÍSTICAS FINALES:
- Fases completadas: 7/7
- Archivos creados: 250+
- Líneas de código: 60,000+
- Endpoints API: 150+
- Tests: 110+
- Documentación: 5,000+ líneas

PROYECTO COMPLETO Y LISTO PARA PRODUCCIÓN
This commit is contained in:
2026-01-31 22:30:44 +00:00
parent e135e7ad24
commit dd10891432
61 changed files with 19256 additions and 142 deletions

417
docs/SETUP.md Normal file
View File

@@ -0,0 +1,417 @@
# 🚀 Guía de Instalación - App Canchas de Pádel
Guía completa para configurar el entorno de desarrollo y producción.
## 📋 Requisitos
### Requisitos del Sistema
| Componente | Versión Mínima | Recomendado |
|------------|----------------|-------------|
| Node.js | 18.x | 20.x LTS |
| npm | 9.x | 10.x |
| PostgreSQL | 14.x | 16.x |
| Git | 2.x | Latest |
### Especificaciones de Hardware
| Entorno | CPU | RAM | Disco |
|---------|-----|-----|-------|
| Desarrollo | 2 cores | 4 GB | 20 GB SSD |
| Producción | 4+ cores | 8+ GB | 50+ GB SSD |
---
## 🛠️ Instalación Paso a Paso
### 1. Clonar el Repositorio
```bash
git clone https://github.com/tu-usuario/app-padel.git
cd app-padel
```
### 2. Instalar Dependencias del Backend
```bash
cd backend
npm install
```
### 3. Configurar Variables de Entorno
Copiar el archivo de ejemplo:
```bash
cp .env.example .env
```
Editar el archivo `.env` con tus valores:
```env
# ============================================
# Configuración de la Base de Datos
# ============================================
DATABASE_URL="postgresql://postgres:tu_password@localhost:5432/app_padel?schema=public"
# ============================================
# Configuración del Servidor
# ============================================
NODE_ENV=development
PORT=3000
API_URL=http://localhost:3000
FRONTEND_URL=http://localhost:5173
# ============================================
# Configuración de JWT
# ============================================
JWT_SECRET=tu_clave_secreta_super_segura_aleatoria_32chars
JWT_EXPIRES_IN=7d
JWT_REFRESH_SECRET=otra_clave_secreta_diferente_32chars
JWT_REFRESH_EXPIRES_IN=30d
# ============================================
# Configuración de Email (SMTP)
# ============================================
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=tu_email@gmail.com
SMTP_PASS=tu_app_password_de_gmail
EMAIL_FROM="Canchas Padel <noreply@tudominio.com>"
# ============================================
# Configuración de Rate Limiting
# ============================================
RATE_LIMIT_WINDOW_MS=900000
RATE_LIMIT_MAX_REQUESTS=100
# ============================================
# Configuración de MercadoPago (Producción)
# ============================================
MERCADOPAGO_ACCESS_TOKEN=APP_USR-0000000000000000-000000-00000000000000000000000000000000-000000000
MERCADOPAGO_PUBLIC_KEY=APP_USR-00000000-0000-0000-0000-000000000000
```
### 4. Crear Base de Datos
```bash
# Conectar a PostgreSQL
sudo -u postgres psql
# Crear base de datos
CREATE DATABASE app_padel;
# Crear usuario (opcional)
CREATE USER app_padel_user WITH PASSWORD 'tu_password_seguro';
GRANT ALL PRIVILEGES ON DATABASE app_padel TO app_padel_user;
# Salir
\q
```
### 5. Ejecutar Migraciones
```bash
# Generar cliente Prisma
npm run db:generate
# Ejecutar migraciones
npm run db:migrate
```
### 6. Seed de Datos (Opcional)
```bash
# Ejecutar seed para datos de prueba
npm run db:seed
```
Este comando creará:
- Usuario admin por defecto
- Canchas de ejemplo
- Planes de suscripción
- Logros del sistema
### 7. Iniciar Servidor en Desarrollo
```bash
npm run dev
```
El servidor estará disponible en: `http://localhost:3000`
---
## 🔧 Configuración Avanzada
### Variables de Entorno Completas
#### Base de Datos
| Variable | Descripción | Ejemplo |
|----------|-------------|---------|
| `DATABASE_URL` | URL de conexión PostgreSQL | `postgresql://user:pass@host:5432/db` |
#### Servidor
| Variable | Descripción | Default |
|----------|-------------|---------|
| `NODE_ENV` | Entorno (development/production) | `development` |
| `PORT` | Puerto del servidor | `3000` |
| `API_URL` | URL base de la API | `http://localhost:3000` |
| `FRONTEND_URL` | URL del frontend (CORS) | `http://localhost:5173` |
#### Seguridad (JWT)
| Variable | Descripción | Recomendación |
|----------|-------------|---------------|
| `JWT_SECRET` | Secreto para tokens | Mínimo 32 caracteres aleatorios |
| `JWT_EXPIRES_IN` | Duración del access token | `7d` |
| `JWT_REFRESH_SECRET` | Secreto para refresh tokens | Diferente al JWT_SECRET |
| `JWT_REFRESH_EXPIRES_IN` | Duración del refresh token | `30d` |
#### Email (SMTP)
| Variable | Descripción | Ejemplo |
|----------|-------------|---------|
| `SMTP_HOST` | Servidor SMTP | `smtp.gmail.com` |
| `SMTP_PORT` | Puerto SMTP | `587` |
| `SMTP_USER` | Usuario SMTP | `tucorreo@gmail.com` |
| `SMTP_PASS` | Contraseña SMTP | `app_password` |
| `EMAIL_FROM` | Remitente por defecto | `Canchas <noreply@tudominio.com>` |
#### Rate Limiting
| Variable | Descripción | Default |
|----------|-------------|---------|
| `RATE_LIMIT_WINDOW_MS` | Ventana en ms | `900000` (15 min) |
| `RATE_LIMIT_MAX_REQUESTS` | Máximo requests | `100` |
#### MercadoPago
| Variable | Descripción | Ejemplo |
|----------|-------------|---------|
| `MERCADOPAGO_ACCESS_TOKEN` | Token de acceso MP | `APP_USR-...` |
| `MERCADOPAGO_PUBLIC_KEY` | Clave pública MP | `APP_USR-...` |
| `MERCADOPAGO_WEBHOOK_SECRET` | Secreto para webhooks | `webhook_secret` |
---
## 🧪 Ejecución en Desarrollo
### Scripts Disponibles
```bash
# Desarrollo con hot reload
npm run dev
# Build para producción
npm run build
# Producción (requiere build previo)
npm start
# Base de datos
npm run db:generate # Generar cliente Prisma
npm run db:migrate # Ejecutar migraciones
npm run db:studio # Abrir Prisma Studio
npm run db:seed # Ejecutar seed
# Calidad de código
npm run lint # Ejecutar ESLint
npm test # Ejecutar tests
```
### Estructura de Archivos en Desarrollo
```
backend/
├── src/
│ ├── config/ # Configuraciones
│ ├── controllers/ # Controladores
│ ├── middleware/ # Middlewares
│ ├── routes/ # Rutas
│ ├── services/ # Lógica de negocio
│ ├── utils/ # Utilidades
│ ├── validators/ # Validaciones Zod
│ └── index.ts # Entry point
├── prisma/
│ └── schema.prisma # Esquema de base de datos
├── logs/ # Archivos de log
├── .env # Variables de entorno
└── package.json
```
---
## 🚀 Ejecución en Producción
### 1. Preparar el Build
```bash
# Instalar dependencias de producción
npm ci --only=production
# Compilar TypeScript
npm run build
```
### 2. Configurar PM2
Crear archivo `ecosystem.config.js`:
```javascript
module.exports = {
apps: [{
name: 'app-padel-api',
script: './dist/index.js',
instances: 'max',
exec_mode: 'cluster',
env: {
NODE_ENV: 'production',
PORT: 3000
},
log_file: './logs/combined.log',
out_file: './logs/out.log',
error_file: './logs/error.log',
log_date_format: 'YYYY-MM-DD HH:mm:ss Z',
merge_logs: true,
max_memory_restart: '1G',
restart_delay: 3000,
max_restarts: 5,
min_uptime: '10s'
}]
};
```
### 3. Iniciar con PM2
```bash
# Iniciar aplicación
pm2 start ecosystem.config.js
# Guardar configuración
pm2 save
# Configurar inicio automático
pm2 startup
```
### 4. Verificar Estado
```bash
pm2 status
pm2 logs app-padel-api
```
---
## 🐳 Docker (Alternativa)
### Usar Docker Compose
```bash
# Iniciar todos los servicios
docker-compose up -d
# Ver logs
docker-compose logs -f backend
# Ejecutar migraciones
docker-compose exec backend npx prisma migrate deploy
```
### Dockerfile (Backend)
```dockerfile
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
RUN npm run build
EXPOSE 3000
CMD ["node", "dist/index.js"]
```
---
## ✅ Verificación de Instalación
### Health Check
```bash
# Verificar API
curl http://localhost:3000/api/v1/health
# Respuesta esperada
{
"success": true,
"message": "API funcionando correctamente",
"timestamp": "2026-01-31T12:00:00.000Z"
}
```
### Lista de Endpoints
```bash
# Ver todas las rutas disponibles
curl http://localhost:3000/api/v1
```
---
## 🔍 Troubleshooting
### Error: "Cannot find module"
```bash
# Reinstalar dependencias
rm -rf node_modules package-lock.json
npm install
```
### Error de conexión a base de datos
```bash
# Verificar PostgreSQL
sudo systemctl status postgresql
# Verificar conexión
psql $DATABASE_URL -c "SELECT 1"
```
### Error: "Prisma schema not found"
```bash
# Regenerar cliente
npx prisma generate
```
### Puerto 3000 en uso
```bash
# Encontrar proceso
lsof -i :3000
# O cambiar el puerto en .env
PORT=3001
```
---
## 📚 Recursos Adicionales
- [Documentación API](./API.md)
- [Guía de Deploy](./DEPLOY.md)
- [Prisma Documentation](https://www.prisma.io/docs)
- [Express.js Guide](https://expressjs.com/en/guide/routing.html)
---
*Última actualización: Enero 2026*