# Plan de Actualizaciones Mayores - Gamilit & Trading-Platform

## Resumen Ejecutivo

Este plan detalla la migración de dependencias con breaking changes significativos para los proyectos **gamilit** y **trading-platform**.

---

## 1. ZOD 3.x → 4.x (GAMILIT Frontend)

### Estado Actual
- **Versión actual**: 4.1.12 (ya está en v4 en package.json)
- **Archivos afectados**: ~30+ archivos con schemas de validación
- **Uso principal**: `@hookform/resolvers/zod` para validación de formularios

### Breaking Changes Relevantes
| Cambio | Impacto | Acción Requerida |
|--------|---------|------------------|
| `message` → `error` param | Alto | Buscar y reemplazar |
| `.default()` behavior change | Medio | Verificar schemas con defaults |
| `ZodError.errors` → `ZodError.issues` | Bajo | Verificar manejo de errores |
| Import paths (`zod/v4`) | Bajo | Mantener `zod` (es v4 default) |

### Análisis del Código
```typescript
// Patrones encontrados que necesitan revisión:
z.string().min(1, 'El correo electrónico es requerido')  // OK - sin cambios
z.enum(['student', 'admin_teacher'], { message: '...' }) // CAMBIO: message → error
.refine((val) => val === true, { message: '...' })       // OK - refine sigue igual
```

### Tareas
1. Ejecutar codemod `npx zod-v3-to-v4`
2. Buscar `{ message:` en schemas y cambiar a `{ error:`
3. Verificar schemas con `.default()` o `.catch()`
4. Ejecutar tests y build

### Riesgo: BAJO (ya está en v4, solo ajustes menores)

---

## 2. STRIPE 14.x → 20.x (Trading-Platform Backend)

### Estado Actual
- **Versión actual**: ^14.7.0
- **Archivos afectados**: 3 archivos en `/modules/payments/`
- **API Version usada**: `2023-10-16`

### Breaking Changes Relevantes
| Cambio | Impacto | Acción Requerida |
|--------|---------|------------------|
| API Version update | Alto | Actualizar apiVersion |
| Checkout Session behavior | Medio | Verificar subscription flow |
| `total_count` deprecated on lists | Bajo | No usado en código |

### Análisis del Código
```typescript
const stripe = new Stripe(config.stripe?.secretKey, {
  apiVersion: '2023-10-16',  // CAMBIO: Actualizar a '2024-12-18.acacia' o latest
});

// Patrones usados:
stripe.customers.create()           // OK
stripe.checkout.sessions.create()   // REVISAR: subscription behavior
stripe.subscriptions.update()       // OK
stripe.billingPortal.sessions.create() // OK
```

### Tareas
1. Actualizar `stripe` a ^20.0.0
2. Actualizar `apiVersion` a versión compatible
3. Verificar webhook signature handling
4. Testear flujo de checkout completo
5. Verificar `stripe.promotionCodes.list()` sigue funcionando

### Riesgo: MEDIO (requiere testing de flujo de pagos)

---

## 3. REDIS 4.x → 5.x (Trading-Platform Backend)

### Estado Actual
- **Versión actual**: ^4.6.10
- **Archivos afectados**: 0 (no se encontró uso activo)
- **Nota**: La dependencia está declarada pero no hay imports de `redis`

### Análisis
```bash
grep -rn "from ['\"']redis['\"']" src/  # Sin resultados
grep -rn "createClient" src/             # Sin resultados
```

### Breaking Changes Relevantes (si se usara)
| Cambio | Impacto |
|--------|---------|
| `client.QUIT()` → `client.close()` | N/A |
| `client.disconnect()` → `client.destroy()` | N/A |
| Iterator changes (SCAN, etc.) | N/A |

### Recomendación
**OPCIÓN A**: Remover la dependencia (no está en uso)
**OPCIÓN B**: Actualizar a v5 para cuando se necesite

### Riesgo: NINGUNO (no hay código que usar redis)

---

## 4. JEST 29.x → 30.x (Ambos Proyectos)

### Estado Actual
- **Versión actual**: ^29.7.0 (gamilit backend, trading-platform backend)
- **Archivos afectados**: Archivos de configuración jest y todos los tests

### Breaking Changes Relevantes
| Cambio | Impacto | Acción Requerida |
|--------|---------|------------------|
| Node 14/16 dropped | Ninguno | Ya usamos Node 18+ |
| jsdom 21→26 | Medio | Revisar mocks de window.location |
| `--testPathPattern` → `--testPathPatterns` | Bajo | Actualizar scripts |
| `genMockFromModule` removed | Bajo | Buscar y reemplazar |
| Snapshot changes (Error.cause) | Bajo | Actualizar snapshots |

### Análisis del Código
```bash
# Buscar uso de APIs deprecadas
grep -rn "genMockFromModule" __tests__/  # Verificar
grep -rn "toBeCalled()" __tests__/        # Cambiar a toHaveBeenCalled()
```

### Tareas
1. Actualizar `jest` a ^30.0.0
2. Actualizar `ts-jest` a versión compatible
3. Actualizar `@types/jest` a ^30.0.0
4. Buscar y reemplazar `genMockFromModule` → `createMockFromModule`
5. Actualizar snapshots: `npm test -- -u`
6. Verificar mocks de `window.location` en frontend tests

### Riesgo: BAJO-MEDIO (principalmente snapshots)

---

## 5. VITEST 3.x → 4.x (Gamilit Frontend)

### Estado Actual
- **Versión actual**: ^3.2.4
- **Archivos afectados**: Configuración vitest y tests de frontend

### Análisis
Vitest 4 tiene cambios menores. La mayoría son mejoras de performance.

### Riesgo: BAJO

---

## Plan de Ejecución por Fases

### FASE 1: Bajo Riesgo (Ejecutar Primero)
1. **Redis**: Remover dependencia no usada
2. **Zod**: Ajustes menores de sintaxis (message → error)

### FASE 2: Riesgo Medio
3. **Jest/Vitest**: Actualizar testing frameworks
4. **Stripe**: Actualizar con testing exhaustivo

### FASE 3: Opcional
5. Otras dependencias menores identificadas

---

## Prompts para Subagentes

### Subagente 1: Migración Zod
```
TAREA: Migrar schemas de Zod en gamilit/apps/frontend

1. Ejecutar: npx zod-v3-to-v4 --dry-run primero
2. Buscar patrones: { message: en archivos *Schema*.ts
3. Reemplazar { message: por { error: en z.enum() y similares
4. NO cambiar .refine() - esos siguen usando message
5. Verificar: npm run build && npm test

Archivos clave:
- src/shared/schemas/auth.schemas.ts
- src/features/mechanics/**/\*Schemas.ts
- src/services/api/schemas/*.ts
```

### Subagente 2: Limpieza Redis
```
TAREA: Remover dependencia redis no usada en trading-platform/apps/backend

1. Verificar que no hay imports de 'redis' en src/
2. Remover "redis": "^4.6.10" de package.json
3. Ejecutar npm install
4. Verificar build: npm run build
```

### Subagente 3: Migración Jest
```
TAREA: Migrar Jest 29→30 en trading-platform/apps/backend

1. Actualizar package.json:
   - "jest": "^30.0.0"
   - "ts-jest": "^29.3.0" (compatible con jest 30)
   - "@types/jest": "^30.0.0"

2. Buscar y reemplazar en __tests__/:
   - genMockFromModule → createMockFromModule
   - toBeCalled() → toHaveBeenCalled()

3. Actualizar jest.config.js si necesario

4. Ejecutar: npm test -- -u (actualizar snapshots)
5. Verificar todos los tests pasan
```

### Subagente 4: Migración Stripe
```
TAREA: Migrar Stripe 14→20 en trading-platform/apps/backend

1. Actualizar package.json: "stripe": "^20.0.0"
2. npm install

3. Actualizar src/modules/payments/services/stripe.service.ts:
   - Cambiar apiVersion: '2023-10-16' → '2024-12-18.acacia'

4. Verificar que estos métodos siguen funcionando:
   - stripe.customers.create()
   - stripe.checkout.sessions.create()
   - stripe.subscriptions.update()
   - stripe.billingPortal.sessions.create()
   - stripe.webhooks.constructEvent()

5. npm run build
6. Documentar cualquier cambio de API necesario
```

---

## Validación Post-Migración

Para cada proyecto:
```bash
# 1. Limpiar node_modules
rm -rf node_modules package-lock.json
npm install

# 2. Verificar vulnerabilidades
npm audit

# 3. Build
npm run build

# 4. Lint
npm run lint

# 5. Tests
npm test

# 6. Dev server (verificación manual)
npm run dev
```

---

## Decisión Final

| Dependencia | Acción | Prioridad | Subagente |
|-------------|--------|-----------|-----------|
| redis | REMOVER | Alta | #2 |
| zod | AJUSTAR | Media | #1 |
| jest | ACTUALIZAR | Media | #3 |
| stripe | ACTUALIZAR | Baja | #4 |
| vitest | POSTERGAR | Baja | - |

**Nota**: Stripe se posterga porque el riesgo de romper pagos en producción es alto y requiere testing exhaustivo con sandbox.
