workspace/PLAN-ACTUALIZACIONES-MAYORES.md
rckrdmrd 789d1ab46b
Some checks failed
CI Pipeline / changes (push) Has been cancelled
CI Pipeline / core (push) Has been cancelled
CI Pipeline / trading-backend (push) Has been cancelled
CI Pipeline / trading-data-service (push) Has been cancelled
CI Pipeline / trading-frontend (push) Has been cancelled
CI Pipeline / erp-core (push) Has been cancelled
CI Pipeline / erp-mecanicas (push) Has been cancelled
CI Pipeline / gamilit-backend (push) Has been cancelled
CI Pipeline / gamilit-frontend (push) Has been cancelled
changes on workspace
2025-12-09 14:46:20 -06:00

277 lines
7.8 KiB
Markdown

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