Marketplace móvil para negocios locales mexicanos. Estructura inicial: - apps/backend (NestJS API) - apps/frontend (React Web) - apps/mobile (Expo/React Native) - apps/mcp-server (Claude MCP Server) - apps/whatsapp-service (WhatsApp Business API) - database/ (PostgreSQL DDL) - docs/ (Documentación) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
300 lines
9.5 KiB
Markdown
300 lines
9.5 KiB
Markdown
# Plan Detallado FASE 2 - Integracion y Pruebas
|
|
|
|
**Fecha**: 2026-01-06
|
|
**Ejecutor**: PERFIL_ORQUESTADOR
|
|
**Basado en**: ANALISIS-FASE1-2026-01-06.md
|
|
|
|
---
|
|
|
|
## Objetivo de FASE 2
|
|
|
|
Conectar todos los componentes implementados (Backend, Frontend, WhatsApp Service, MCP Server, Database) en un sistema funcional e integrado.
|
|
|
|
---
|
|
|
|
## 1. TAREAS IDENTIFICADAS
|
|
|
|
### 1.1 Bloque A: Integracion Backend-Database (CRITICO)
|
|
|
|
| ID | Tarea | Prioridad | Esfuerzo | Dependencias |
|
|
|----|-------|-----------|----------|--------------|
|
|
| A1 | Configurar TypeORM con conexion PostgreSQL | P0 | 2h | Database creada |
|
|
| A2 | Sincronizar entidades con schemas existentes | P0 | 4h | A1 |
|
|
| A3 | Configurar RLS middleware en NestJS | P0 | 3h | A2 |
|
|
| A4 | Crear migration base desde schemas | P1 | 2h | A2 |
|
|
| A5 | Actualizar puerto backend a 3141 | P0 | 0.5h | - |
|
|
| A6 | Verificar conexion con seeds existentes | P0 | 1h | A1-A3 |
|
|
|
|
**Entregable Bloque A**: Backend conectado a PostgreSQL con aislamiento multi-tenant
|
|
|
|
### 1.2 Bloque B: Integracion Frontend-Backend
|
|
|
|
| ID | Tarea | Prioridad | Esfuerzo | Dependencias |
|
|
|----|-------|-----------|----------|--------------|
|
|
| B1 | Configurar proxy Vite -> Backend (3141) | P0 | 0.5h | A5 |
|
|
| B2 | Actualizar api.ts con baseURL correcta | P0 | 0.5h | B1 |
|
|
| B3 | Implementar autenticacion en frontend | P0 | 3h | A1 |
|
|
| B4 | Conectar Dashboard con API real | P1 | 2h | B3 |
|
|
| B5 | Conectar Products con API real | P1 | 2h | B3 |
|
|
| B6 | Conectar Orders con API real | P1 | 2h | B3 |
|
|
| B7 | Conectar Customers con API real | P1 | 2h | B3 |
|
|
| B8 | Conectar Fiado con API real | P1 | 2h | B3 |
|
|
| B9 | Conectar Inventory con API real | P1 | 2h | B3 |
|
|
| B10 | Conectar Settings con API real | P2 | 1h | B3 |
|
|
|
|
**Entregable Bloque B**: Frontend funcional con datos reales
|
|
|
|
### 1.3 Bloque C: Integracion WhatsApp Service
|
|
|
|
| ID | Tarea | Prioridad | Esfuerzo | Dependencias |
|
|
|----|-------|-----------|----------|--------------|
|
|
| C1 | Configurar BACKEND_API_URL en WhatsApp Service | P0 | 0.5h | A5 |
|
|
| C2 | Implementar fetch de productos desde backend | P1 | 2h | A6, C1 |
|
|
| C3 | Implementar fetch de categorias desde backend | P1 | 1h | A6, C1 |
|
|
| C4 | Implementar fetch de ordenes desde backend | P1 | 2h | A6, C1 |
|
|
| C5 | Implementar fetch de fiado desde backend | P1 | 2h | A6, C1 |
|
|
| C6 | Implementar creacion de ordenes via backend | P1 | 3h | C4 |
|
|
| C7 | Actualizar puerto WhatsApp Service a 3143 | P0 | 0.5h | - |
|
|
|
|
**Entregable Bloque C**: WhatsApp Service conectado al backend
|
|
|
|
### 1.4 Bloque D: Integracion MCP Server
|
|
|
|
| ID | Tarea | Prioridad | Esfuerzo | Dependencias |
|
|
|----|-------|-----------|----------|--------------|
|
|
| D1 | Actualizar BACKEND_URL en MCP Server | P0 | 0.5h | A5 |
|
|
| D2 | Probar todos los tools con backend real | P1 | 3h | A6, D1 |
|
|
| D3 | Ajustar endpoints si hay discrepancias | P1 | 2h | D2 |
|
|
| D4 | Documentar tools disponibles | P2 | 1h | D3 |
|
|
|
|
**Entregable Bloque D**: MCP Server operativo con backend
|
|
|
|
### 1.5 Bloque E: Pruebas de Integracion
|
|
|
|
| ID | Tarea | Prioridad | Esfuerzo | Dependencias |
|
|
|----|-------|-----------|----------|--------------|
|
|
| E1 | Test flujo registro tenant | P0 | 1h | B3 |
|
|
| E2 | Test flujo login/logout | P0 | 1h | B3 |
|
|
| E3 | Test flujo crear producto | P1 | 1h | B5 |
|
|
| E4 | Test flujo crear venta (POS) | P1 | 2h | B5 |
|
|
| E5 | Test flujo crear pedido | P1 | 1h | B6 |
|
|
| E6 | Test flujo fiado | P1 | 2h | B8 |
|
|
| E7 | Test flujo WhatsApp -> Pedido | P1 | 2h | C6 |
|
|
| E8 | Test flujo MCP tools | P1 | 2h | D2 |
|
|
|
|
**Entregable Bloque E**: Sistema validado end-to-end
|
|
|
|
---
|
|
|
|
## 2. ORDEN DE EJECUCION
|
|
|
|
### Fase 2.1: Preparacion (Dia 1)
|
|
```
|
|
A5 (Puerto backend) ────────────────────────┐
|
|
│
|
|
C7 (Puerto WhatsApp) ───────────────────────┼───┐
|
|
│ │
|
|
D1 (URL MCP) ───────────────────────────────┘ │
|
|
│
|
|
B1 (Proxy Vite) ────────────────────────────────┘
|
|
```
|
|
|
|
### Fase 2.2: Backend-Database (Dia 1-2)
|
|
```
|
|
A1 (TypeORM config) ──► A2 (Sync entities) ──► A3 (RLS middleware)
|
|
│
|
|
▼
|
|
A6 (Verificar seeds)
|
|
│
|
|
▼
|
|
A4 (Migrations) [opcional]
|
|
```
|
|
|
|
### Fase 2.3: Frontend Integration (Dia 2-3)
|
|
```
|
|
B2 (api.ts) ──► B3 (Auth) ──┬──► B4 (Dashboard)
|
|
├──► B5 (Products)
|
|
├──► B6 (Orders)
|
|
├──► B7 (Customers)
|
|
├──► B8 (Fiado)
|
|
├──► B9 (Inventory)
|
|
└──► B10 (Settings)
|
|
```
|
|
|
|
### Fase 2.4: Services Integration (Dia 3-4)
|
|
```
|
|
C1 (Config) ──► C2 (Products) ──► C6 (Create orders)
|
|
│
|
|
├──► C3 (Categories)
|
|
├──► C4 (Orders)
|
|
└──► C5 (Fiado)
|
|
|
|
D1 (Config) ──► D2 (Test tools) ──► D3 (Ajustes)
|
|
```
|
|
|
|
### Fase 2.5: Testing (Dia 4-5)
|
|
```
|
|
E1 (Registro) ──► E2 (Login) ──► E3 (Producto) ──► E4 (Venta)
|
|
│
|
|
├──► E5 (Pedido)
|
|
└──► E6 (Fiado)
|
|
|
|
E7 (WhatsApp flow) ─────────────────────────────────────────►
|
|
|
|
E8 (MCP tools) ─────────────────────────────────────────────►
|
|
```
|
|
|
|
---
|
|
|
|
## 3. DETALLE DE TAREAS CRITICAS
|
|
|
|
### 3.1 Tarea A1: Configurar TypeORM
|
|
|
|
**Archivo**: `apps/backend/src/app.module.ts`
|
|
|
|
**Configuracion requerida**:
|
|
```typescript
|
|
TypeOrmModule.forRoot({
|
|
type: 'postgres',
|
|
host: process.env.DB_HOST || 'localhost',
|
|
port: parseInt(process.env.DB_PORT || '5432'),
|
|
username: process.env.DB_USER || 'michangarrito_dev',
|
|
password: process.env.DB_PASSWORD || 'MCh_dev_2025_secure',
|
|
database: process.env.DB_NAME || 'michangarrito_dev',
|
|
entities: [__dirname + '/**/*.entity{.ts,.js}'],
|
|
synchronize: false, // IMPORTANTE: No auto-sync
|
|
logging: process.env.NODE_ENV === 'development',
|
|
})
|
|
```
|
|
|
|
**Variables .env**:
|
|
```env
|
|
DB_HOST=localhost
|
|
DB_PORT=5432
|
|
DB_NAME=michangarrito_dev
|
|
DB_USER=michangarrito_dev
|
|
DB_PASSWORD=MCh_dev_2025_secure
|
|
```
|
|
|
|
### 3.2 Tarea A3: RLS Middleware
|
|
|
|
**Archivo nuevo**: `apps/backend/src/common/middleware/tenant.middleware.ts`
|
|
|
|
**Funcion**: Establecer `app.current_tenant` en cada request
|
|
|
|
**Flujo**:
|
|
1. Extraer tenantId del JWT token
|
|
2. Ejecutar `SET app.current_tenant = 'uuid'`
|
|
3. Continuar con el request
|
|
|
|
### 3.3 Tarea B3: Autenticacion Frontend
|
|
|
|
**Archivos a modificar**:
|
|
- `apps/frontend/src/lib/api.ts` - Agregar interceptor auth
|
|
- `apps/frontend/src/App.tsx` - Agregar rutas protegidas
|
|
- Nuevo: `apps/frontend/src/pages/Login.tsx`
|
|
- Nuevo: `apps/frontend/src/contexts/AuthContext.tsx`
|
|
|
|
**Flujo**:
|
|
1. Login -> POST /auth/login -> JWT
|
|
2. Guardar token en localStorage
|
|
3. Interceptor agrega Bearer token
|
|
4. Proteger rutas con AuthContext
|
|
|
|
---
|
|
|
|
## 4. CRITERIOS DE ACEPTACION
|
|
|
|
### 4.1 Bloque A (Backend-Database)
|
|
- [ ] Backend inicia sin errores en puerto 3141
|
|
- [ ] Conexion a PostgreSQL exitosa
|
|
- [ ] Query a tenants retorna datos de seeds
|
|
- [ ] RLS activo: queries filtran por tenant_id
|
|
|
|
### 4.2 Bloque B (Frontend)
|
|
- [ ] Login funciona con credenciales de prueba
|
|
- [ ] Dashboard muestra estadisticas reales
|
|
- [ ] CRUD productos funcional
|
|
- [ ] Lista de ordenes con datos reales
|
|
- [ ] Lista de clientes con datos reales
|
|
|
|
### 4.3 Bloque C (WhatsApp)
|
|
- [ ] Webhook responde correctamente
|
|
- [ ] Mensaje "hola" muestra menu
|
|
- [ ] Consulta de productos funciona
|
|
- [ ] Creacion de pedido funciona
|
|
|
|
### 4.4 Bloque D (MCP)
|
|
- [ ] list_products retorna datos reales
|
|
- [ ] create_order crea pedido en DB
|
|
- [ ] get_fiado_balance consulta datos reales
|
|
|
|
### 4.5 Bloque E (Tests)
|
|
- [ ] Flujo completo registro -> login -> crear producto -> venta
|
|
- [ ] Flujo WhatsApp -> pedido -> confirmacion
|
|
- [ ] Sin errores 500 en consola
|
|
|
|
---
|
|
|
|
## 5. RIESGOS Y MITIGACIONES
|
|
|
|
| Riesgo | Probabilidad | Mitigacion |
|
|
|--------|--------------|------------|
|
|
| Mismatch entidades-schemas | Alta | Revisar uno por uno con DDL |
|
|
| Timeout PostgreSQL | Baja | Configurar pool connections |
|
|
| CORS issues | Media | Configurar origins en backend |
|
|
| JWT expiracion | Media | Implementar refresh token |
|
|
|
|
---
|
|
|
|
## 6. RECURSOS REQUERIDOS
|
|
|
|
### 6.1 Desarrollo
|
|
- 1 Backend Developer (A1-A6, C1-C7, D1-D3)
|
|
- 1 Frontend Developer (B1-B10)
|
|
- QA para E1-E8
|
|
|
|
### 6.2 Infraestructura
|
|
- PostgreSQL corriendo (ya disponible)
|
|
- Redis (opcional para cache)
|
|
- Cuenta WhatsApp Business (para C1-C7)
|
|
|
|
### 6.3 Herramientas
|
|
- Postman/Insomnia para testing API
|
|
- pgAdmin para verificar datos
|
|
|
|
---
|
|
|
|
## 7. ESTIMACION TOTAL
|
|
|
|
| Bloque | Horas | Dias (8h) |
|
|
|--------|-------|-----------|
|
|
| A | 12.5h | 1.5 |
|
|
| B | 17h | 2 |
|
|
| C | 11h | 1.5 |
|
|
| D | 6.5h | 1 |
|
|
| E | 12h | 1.5 |
|
|
| **Total** | **59h** | **7.5 dias** |
|
|
|
|
**Buffer 20%**: 9 dias habiles
|
|
|
|
---
|
|
|
|
## 8. ENTREGABLES FINALES FASE 2
|
|
|
|
1. Backend conectado a PostgreSQL con RLS
|
|
2. Frontend funcional con API real
|
|
3. WhatsApp Service integrado
|
|
4. MCP Server operativo
|
|
5. Suite de pruebas manuales documentada
|
|
6. .env.example actualizado
|
|
7. README actualizado con instrucciones de setup
|
|
|
|
---
|
|
|
|
**Aprobacion requerida para continuar a Fase 3 (Mobile App)**
|
|
|
|
---
|
|
|
|
**Fin del Plan FASE 2**
|