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
277 lines
7.8 KiB
Markdown
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.
|